Это о том, как 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... это нормальное поведение, и почему?
Это - нормальное поведение нормального 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.