bash- Control-C поведение (^C) / гксудо против судо
Это о том, как нажатие клавиш Ctrl+C имеет другой эффект при выполнении gksudo экземпляр в отличие от sudo пример.
Я выполнил следующее с помощью gksudo Чтобы прочитать файл журнала сбоя установки:
$ gksudo gedit /tmp/vmware-root/setup-5686.log
Когда я намеревался закрыть экземпляр gedit, я нажал alt-tab на (исходной) консоли и нажал ctrl+c. Управление вернулось в консоль НО gedit Программа все еще работала нормально.
Это другое поведение, чем как sudo ведет себя, если используется в предыдущем вызове (что я НЕ рекомендую делать). Используя sudo, ^C возвращает управление на консоль И закрывает gedit программа.
Я новичок в Linux... это нормальное поведение и почему?
1 ответ
Это нормальное поведение нормального gksudo/gksuпо крайней мере на Xubuntu и Linux Mint XFCE. Убийство (CTRL+C) gksu gedit (gksudo - это ссылка на gksu) оставляет gedit работающим.
man gksu имеет эту потенциально полезную информацию:
Также обратите внимание, что библиотека решит, следует ли ей использовать su или sudo в качестве бэкэнда с помощью ключа gconf / apps / gksu / sudo-mode, если вы вызываете команду gksu. Вы можете принудительно запустить бэкэнд с помощью команды gksudo или с помощью параметров --sudo-mode и --su-mode.
Но тестирование с любым из вариантов приводит к тому же самому поведению.
Этот тест может быть полезным:
$ 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 запускает команду, она вызывает fork(2), устанавливает среду выполнения, как описано выше, и вызывает системный вызов execve в дочернем процессе. Основной процесс sudo ожидает завершения команды, затем передает статус завершения команды функции закрытия политики безопасности и завершает работу.Обработка сигналов
Когда команда запускается как дочерний элемент процесса sudo, sudo будет передавать полученные сигналы команде. Если команда не выполняется в новом pty, сигналы SIGHUP, SIGINT и SIGQUIT не передаются, если они не отправлены пользовательским процессом, а не ядром. В противном случае команда будет получать SIGINT дважды каждый раз, когда пользователь вводит control-C. Некоторые сигналы, такие как SIGSTOP и SIGKILL, не могут быть перехвачены и, следовательно, не будут переданы команде. Как правило, вместо SIGSTOP следует использовать SIGTSTP, если вы хотите приостановить выполнение команды sudo.