Я выполняю несколько задач рядом в системе 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
?
Если Вы не могли бы уничтожить процесс его PID, то Вы не могли уничтожить его с помощью идентификатора его задания.
Для уничтожения процесса с помощью идентификатора его задания, не сохраняя данные, заключительные операции сессии и так далее, используйте:
kill -9 %1
kill
отправляет сигнал номер 15 (SIGTERM) для обработки, который мог быть проигнорирован процессом, как это находится в нашем случае, из-за этого останавливается и, возможно, отклоняет для слушания SIGTERM в остановленном состоянии. Но сигнал номер 9 (SIGKILL) отправляется ядром, и это не заботится, мог ли процесс услышать или нет. Это только заканчивает его сильно.
Существует несколько вещей указать здесь:
kill
без любых аргументов отправляет a SIGTERM
предупредите к желаемому процессу или идентификатору задания.
SIGTERM
может быть проигнорирован процессом, получающим его.
Процесс, который был остановлен (восстановил a SIGSTOP
например, Ctrl+z использования), ничего не может сделать (сохранить файл, и т.д.).
Когда Вы работаете kill
без аргумента на процессе, для которого нужны определенные шаги, которые будут закрыты, но наклоне (потому что он останавливается) он не делает ответа на SIGTERM
и игнорирует его. в другой руке SIGKILL
не может быть проигнорирован так, это уничтожает процесс. вот почему команда как sleep
может быть завершен с kill %1
очень хорошо, но программа как nano
не может.