Почему 'уничтожает %jobnumber' не, работают над остановленными заданиями?

Я выполняю несколько задач рядом в системе LTS Ubuntu 18. Таким образом, я переключаюсь между этими заданиями путем выполнения:

# command &
# fg
# fg -

Я также использую Ctrl+Z иногда для отправки рабочего задания в фон.

Скажите, что у меня есть 3 задания в моем списке:

# jobs
[1]+  Stopped                 nano /etc/nginx/site-available/blog.conf
[2]   Stopped                 top
[3]-  Stopped                 nano script.sh

Я могу успешно переключиться между ними, но когда я работаю kill команда на них, задания все еще показывают в списке. Ни один не уничтожается. Почему?

# kill %1

Я перечисляю снова, и задания все еще там:

# jobs
[1]+  Stopped                 nano /etc/nginx/site-available/blog.conf
[2]   Stopped                 top
[3]-  Stopped                 nano script.sh

PS: Я могу уничтожить задания с их идентификаторами процесса, но почему не с kill %1?

4
задан 11 March 2020 в 23:03

2 ответа

Если Вы не могли бы уничтожить процесс его PID, то Вы не могли уничтожить его с помощью идентификатора его задания.

Для уничтожения процесса с помощью идентификатора его задания, не сохраняя данные, заключительные операции сессии и так далее, используйте:

kill -9 %1

kill отправляет сигнал номер 15 (SIGTERM) для обработки, который мог быть проигнорирован процессом, как это находится в нашем случае, из-за этого останавливается и, возможно, отклоняет для слушания SIGTERM в остановленном состоянии. Но сигнал номер 9 (SIGKILL) отправляется ядром, и это не заботится, мог ли процесс услышать или нет. Это только заканчивает его сильно.

3
ответ дан 17 March 2020 в 00:04

Существует несколько вещей указать здесь:

  1. kill без любых аргументов отправляет a SIGTERM предупредите к желаемому процессу или идентификатору задания.

  2. SIGTERM может быть проигнорирован процессом, получающим его.

  3. Процесс, который был остановлен (восстановил a SIGSTOP например, Ctrl+z использования), ничего не может сделать (сохранить файл, и т.д.).

Когда Вы работаете kill без аргумента на процессе, для которого нужны определенные шаги, которые будут закрыты, но наклоне (потому что он останавливается) он не делает ответа на SIGTERM и игнорирует его. в другой руке SIGKILL не может быть проигнорирован так, это уничтожает процесс. вот почему команда как sleep может быть завершен с kill %1 очень хорошо, но программа как nano не может.

4
ответ дан 17 March 2020 в 00:04

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

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