удар - поведение Ctrl-C (^C) / gksudo по сравнению с sudo

Это о том, как ctrl+c нажатие клавиши имеет другой эффект при выполнении к a gksudo экземпляр в противоположность a sudo экземпляр.

Я выполнил следующее использование gksudo считать файл журнала отказа установки:

$ gksudo gedit /tmp/vmware-root/setup-5686.log

Когда я означал закрывать gedit экземпляр, я alt-tabbed к (инициирующей) консоли и нажал ctrl+c. Управление, возвращенное к консоли, НО gedit программа все еще хорошо работала.

Это - другое поведение, чем как sudo ведет себя, если используется в предыдущем вызове (который я НЕ рекомендую делать). При помощи sudo, ^C возвращает управление консоли И завершениям gedit программа.

Я плохо знаком с Linux... это нормальное поведение, и почему?

0
задан 8 February 2015 в 11:08

1 ответ

Это - нормальное поведение нормального gksudo/gksu, по крайней мере, на Xubuntu & Linux Mint XFCE. Уничтожение (CTRL+C) gksu gedit (gksudo ссылка на gksu), оставляет gedit, все еще работающий.

man gksu имеет эту потенциально полезную информацию:

Также заметьте, что библиотека решит, должна ли она использовать su или sudo как бэкенд с помощью/apps/gksu/sudo-mode gconf ключ при вызове команды gksu. Можно вызвать бэкенд при помощи команды gksudo, или при помощи - sudo-режима и - опции su-режима.

Но тестирование с любой опцией приводит к тому же поведению.


Этот тест мог бы быть поучительным:

$ gksu gedit

[затем в другом терминале]

$ ps -ef|grep [g]edit
UID        PID  PPID  C STIME TTY          TIME CMD
mint      6878  6701  0 23:04 pts/0    00:00:00 gksu gedit
root      6879  6878  0 23:04 ?        00:00:00 /usr/bin/sudo -H -S -p GNOME_SUDO_PASS -u root -- gedit
root      6880  6879  0 23:04 ?        00:00:00 gedit

[После того, как уничтожение (CTRL+C) gksu gedit в первом терминале это не останавливается sudo или gedit]

$ ps -ef|grep [g]edit
root      6879     1  0 23:04 ?        00:00:00 /usr/bin/sudo -H -S -p GNOME_SUDO_PASS -u root -- gedit
root      6880  6879  0 23:04 ?        00:00:00 gedit

[Уничтожение первого sudo (с другим sudo), действительно уничтожает gedit]

$ sudo kill 6879
$ ps -ef|grep [g]edit

Точно так же, как выполнение sudo gedit в терминале запустится gedit, и CTRL+C sudo уничтожит gedit. Но также и, если я закрываю терминал, sudo и gedit все еще продолжайте бежать.

Так, sudo не заботится, если программа, которая назвала его (gksu или терминал), уничтожается, это и независимо от того, что это запускается, продолжает бежать также.


И эти выборки от man sudo могло бы быть полезным также:

Модель процесса
Когда sudo выполняет команду, он называет ветвление (2), настраивает среду выполнения, как описано выше и называет execve системный вызов в дочернем процессе. Основной процесс sudo ожидает, пока команда не завершила, затем передает статус выхода команды близкой функции и выходам политики безопасности.

Обработка сигнала
Когда команда выполняется, поскольку ребенок процесса sudo, sudo передаст сигналы, это получает к команде. Если команда не выполняется в новом имуществе, SIGHUP, SIGINT и сигналы SIGQUIT не передаются, если они не отправляются пользовательским процессом, не ядром. Иначе команда получила бы SIGINT дважды каждый раз, когда пользователь ввел Ctrl-C. Некоторые сигналы, такие как SIGSTOP и SIGKILL, не могут быть пойманы и таким образом не будут переданы к команде. Как правило SIGTSTP должен использоваться вместо SIGSTOP, когда Вы хотите приостановить команду, выполняемую sudo.

0
ответ дан 6 October 2019 в 02:16

Другие вопросы по тегам:

Похожие вопросы: