Почему гксудо не выходит после запуска фонового процесса?

962
vava

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

0

2 ответа на вопрос

2
nagul

Когда 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
innaM

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

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

gksudo conky & 
Это не работает @nagul, вероятно, прав, и он просто ожидает код выхода. vava 15 лет назад 0
Странный. Меня устраивает. innaM 15 лет назад 0