Я пытаюсь запустить conky с помощью gksudo (чтобы получить преимущество среди всех процессов, а не только у меня), но у меня действительно странная проблема. Несмотря на то, что conky разветвляется и выходит немедленно, gksudo не выходит одновременно. Если я закрою его с помощью Ctrl+C, conky продолжит работать, что доказывает, что он успешно разветвился. Как я могу заставить gksudo увидеть, что процесс, который он начал, закончился, и вернуть мне мою оболочку?

2 ответа2

2

Когда conky разветвляется и выходит, родительский процесс, созданный gksudo, будет продолжать работать как процесс зомби.

В Unix и Unix-подобных компьютерных операционных системах процесс зомби или несуществующий процесс - это процесс, который завершил выполнение, но все еще имеет запись в таблице процессов. Эта запись по-прежнему необходима, чтобы процесс, запустивший (теперь зомби) процесс, мог прочитать его состояние выхода. Термин «зомби-процесс» происходит от общего определения зомби - нежити. В красочной метафоре термина дочерний процесс умер, но еще не был пожнен.

Пока этот процесс присутствует, gksudo будет продолжать работать. С его справочной страницы:

После успешного выполнения программы возвращаемое значение из sudo будет просто возвращаемым значением программы, которая была выполнена.

Если вы работаете в интерактивном режиме, запустите его в фоновом режиме, как это предлагается, и для неинтерактивного использования предоставьте root-права для conky или сценария оболочки через файл /etc /sudoers.

Изменить: Используя пример gvim в другом ответе:

$ #gksudo running
$ ps -ef | grep gvim
171:nagul    22876  9378  0 12:18 pts/1    00:00:00 gksudo gvim
172:root     22877 22876  0 12:18 ?        00:00:00 [gvim] <defunct>
176:root     22892     1  0 12:18 ?        00:00:00 gvim

$ #gksudo killed via Ctrl-C
$ ps -ef | grep gvim
174:root     22892     1  0 12:18 ?        00:00:00 gvim
0

Мне кажется, что Гксудо никогда не делает этого. Например, gvim вернет вам рабочую оболочку, когда вы ее запустите. Но запуск с помощью gksudo заблокирует оболочку.

Самое простое, что вы можете сделать, это запустить его в фоновом режиме:

gksudo conky &

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .