Убить #### но процесс еще там?

Я бы не ожидал увидеть ничего в 3-й команде ниже, но, очевидно, мои ожидания неверны. Почему?

$ sudo fuser -v /dev/snd/*
                     USER        PID ACCESS COMMAND
/dev/snd/controlC0:  joeuser   2339 F.... pulseaudio
/dev/snd/controlC2:  joeuser   2339 F.... pulseaudio
/dev/snd/pcmC0D7p:   joeuser   2339 F...m pulseaudio
/dev/snd/pcmC2D0c:   joeuser   2339 F...m pulseaudio
/dev/snd/pcmC2D0p:   joeuser   2339 F...m pulseaudio
$ kill 2339
$ sudo fuser -v /dev/snd/*
                     USER        PID ACCESS COMMAND
/dev/snd/controlC0:  joeuser   2339 F.... pulseaudio
/dev/snd/controlC2:  joeuser   2339 F.... pulseaudio
/dev/snd/pcmC0D7p:   joeuser   2339 F...m pulseaudio
/dev/snd/pcmC2D0c:   joeuser   2339 F...m pulseaudio
/dev/snd/pcmC2D0p:   joeuser   2339 F...m pulseaudio
2
задан 14 July 2020 в 18:18

2 ответа

Команда kill просто отправляет сигнал процессу, и сигнал по умолчанию (если вы его не выбираете) перехватывается процессом и может игнорироваться или обрабатываться каким-либо другим способом. Используйте сигнал -9, который является немаскируемым сигналом, чтобы незаметно убить процесс. Вы можете проверить любую документацию процесса, чтобы, возможно, найти сигнал, который скажет процессу очиститься и завершиться, но -9 - это обычный подход "просто убей его". or from the names for the signals (list from kill -l)

kill SIGKILL 2339
6
ответ дан 30 July 2020 в 22:07

Хотя убийство с помощью -9 (SIGKILL) будет работать, оно не будет это мой первый выбор. Когда я сталкиваюсь с процессами убийства, в которых я не уверен, я делаю последовательные убийства в следующем порядке:

  • kill -15 (SIGTERM), который является сигналом по умолчанию, когда вы не указываете номер сигнала. Программы должны обрабатывать этот сигнал и корректно завершать работу. Некоторые этого не делают.
  • kill -2 (SIGINT) - это то, что получит программа, если вы введете CTRL-C, чтобы прервать ее. Некоторые программы, у которых нет tty, по-прежнему будут обрабатывать это.
  • kill -1 (SIGHUP) - это то, что процесс получает, когда вы выходите из терминала и tty уходит. Это обрабатывается большим количеством программ.
  • kill -9 (SIGKILL) - ваше последнее средство, так как его невозможно обработать. Если ваша программа использует терминал в неканоническом режиме, ваш терминал не будет сброшен, поэтому ваша командная строка может быть испорчена. Простое "stty sane ^ j" (control-j для выполнения прямого LF) должен восстановить его.

Не все программы обрабатывают сигналы должным образом, и некоторые будут обрабатывать некоторые сигналы, но не другие. Я нашел этот способ самым безопасным.

2
ответ дан 30 July 2020 в 22:07

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

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