Баш пид вообще ничего не возвращает - PullRequest
2 голосов
/ 23 февраля 2012

Я изучал bash с книгой под названием изучение оболочки bash. Все было хорошо, пока я не наткнулся на команду kill. Я создал небольшой скрипт под названием loop, а затем запустил его, используя loop &. Когда я использую kill %loop, а затем ps -e | grep loop, процесс все еще там. Так я не смог убить его? Должен ли я использовать kill -9? Кроме того, pidof, казалось, не работал вообще, когда я использую pidof loop. Он вообще ничего не возвращает.

Я использую Ubuntu и Bash. Хотя я думаю, что сценарий не должен иметь значения, здесь он на всякий случай:

#! /bin/bash
# Just a script
while true; do
    sleep 60
done

1 Ответ

2 голосов
/ 23 февраля 2012

Сценарии оболочки не запускаются в качестве имени сценария.Они запускаются как имя оболочки, которую вы указываете в шебанге.В вашем случае это /bin/bash.Если бы вы сделали pidof bash, вы бы получили pid своего скрипта (вместе со всеми другими скриптами bash, запущенными в то время).

При этом вы не можете убить скрипты ихимя, как вы пытаетесь с kill %loop.Kill принимает только пиды.Если вы используете нотацию %, то это относится к внутреннему номеру задания, назначенному оболочкой.Например, используя ваш скрипт цикла в качестве примера:

$ ./loop &  <-- first run of loop script
[1] 8077    <--- job #1, running as pid 8077
$ ./loop &  <--- second run of loop script
[2] 8079    <-- job #2, running as pid 8079
$ jobs
[1]-  Running                 ./loop &
[2]+  Running                 ./loop &
$ kill %2
$ jobs
[1]-  Running                 ./loop &
[2]+  Terminated              ./loop    <-- note, showing 'terminated' now
$ kill -9 8077
$ jobs
[1]+  Killed                  ./loop
$ jobs
$
...