Co robi 'kill -0 $pid' w skrypcie powłoki?
Zasadniczo, jaki sygnał reprezentuje '0', ponieważ tutaj widzę numery sygnałów zaczynające się od 1.
6 answers
Wysyłanie sygnału 0
do podanego PID
sprawdza tylko, czy jakiś proces z podanym PID
jest uruchomiony i masz pozwolenie na wysłanie sygnału do niego.
Więcej informacji można znaleźć na następujących stronach manpages:
kill(1)$ man 1 kill
...
If sig is 0, then no signal is sent, but error checking is still performed.
...
kill(2)
$ man 2 kill
...
If sig is 0, then no signal is sent, but error checking is still performed; this
can be used to check for the existence of a process ID or process group ID.
...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-21 22:18:17
To jest dobre pytanie, ponieważ...
...może być ciężko znaleźć dokumentację tego specjalnego sygnału. Pomimo tego, co powiedzieli inni, jedyną wzmianką o tym sygnale w man 1 kill
w systemach opartych na Debianie jest:
[9]}niezbyt pomocny, zwłaszcza jeśli nie wiesz jeszcze, co robi sygnał. Nie jest również wymieniony przez wyjścieSzczególnie przydatne sygnały obejmują HUP, INT, KILL, STOP, CONT i 0.
kill -l
, więc nie będziesz o tym wiedział, chyba że już o tym wiem.
Gdzie go znaleźć
W systemach Debian i Ubuntu wyjście man 2 kill
mówi częściowo:
Jeśli sig jest równe 0, to nie jest wysyłany żaden sygnał, ale sprawdzanie błędów jest nadal wykonywane; może to być użyte do sprawdzenia istnienia ID procesu lub grupy procesów.
Do czego to jest dobre
Możesz użyć kill -0
, aby sprawdzić, czy Proces jest uruchomiony. Rozważ te przykłady.
# Kill the process if it exists and accepts signals from
# the current user.
sleep 60 &
pid=$!
kill -0 $pid && kill $pid
# Check if a PID exists. When missing, this should result
# in output similar to:
# bash: kill: (6228) - No such process
# Exit status: 1
kill -0 $pid; echo "Exit status: $?"
Możesz również użyć kill -0
do określ, czy bieżący użytkownik ma uprawnienia do sygnalizowania danego procesu. Na przykład:
# See if you have permission to signal the process. If not,
# this should result in output similar to:
# bash: kill: (15764) - Operation not permitted
# Exit status: 1
sudo sleep 60 &
kill -0 $!; echo "Exit status: $?"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-23 14:31:15
To polecenie sprawdza czy proces z PID w $pid jest żywy.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-13 10:11:55
Kill -0 $pid polega na sprawdzeniu czy proces z pid istnieje czy nie.
Bądź ostrożny używając 'kill -0 $pid' aby sprawdzić istnienie procesu, ponieważ
-
Po zakończeniu zamierzonego procesu jego pid może być przypisany do innego nowo utworzonego procesu. ( Więc nie można być pewnym, że dany proces jest żywy lub nie)
W przypadku procesu Zombie, na który dziecko czeka aż rodzic wywoła wait. Tutaj trzyma $pid i daje pozytywne wynik, gdy ten proces nie jest uruchomiony.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-26 11:12:11
Http://djangstorm.com/Content/kill.html . Sprawdzanie błędów, tutaj odnosi się do uprawnień dostępnych do wykonania polecenia przez użytkownika.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-12 02:21:21
Kill -0 $pid używany do sprawdzania, czy proces z $pid jest żywy, czy nie. Ale może to być trudne, ponieważ identyfikator procesu może być ponownie przypisany po zakończeniu procesu i uruchomieniu nowego procesu. Można użyć killall -0, aby dowiedzieć się, czy dany proces jest uruchomiony, czy nie.