Fondamentalmente, quale segnale rappresenta '0', perché qui vedo i SEGNALI che iniziano da 1.
kill 0
(senza trattino), spiegata qui e qui .
Fondamentalmente, quale segnale rappresenta '0', perché qui vedo i SEGNALI che iniziano da 1.
kill 0
(senza trattino), spiegata qui e qui .
Risposte:
l'invio del segnale 0
a un dato PID
controlla solo se PID
è in esecuzione un processo con il dato e si dispone dell'autorizzazione per inviare un segnale ad esso.
Per ulteriori informazioni, consultare le seguenti manpage:
uccidere (1)$ man 1 kill
...
If sig is 0, then no signal is sent, but error checking is still performed.
...
uccidere (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.
...
man 2 kill
invece.
man 1 kill
e ce l' man 2 kill
avevo sul mio sistema Fedora 20. È difficile da individuare, seppellito in entrambe quelle pagine man.
If sig is 0 (the null signal), error checking is performed but no signal is actually sent. The null signal can be used to check the validity of pid.
pubs.opengroup.org/onlinepubs/009695399/functions/kill.html
man 2 kill
è fuori dal primo emendamento :)
... può essere difficile trovare documentazione su questo segnale speciale. Nonostante ciò che altri hanno detto, l'unica menzione di questo segnale nei man 1 kill
sistemi basati su Debian è:
Segnali particolarmente utili includono HUP, INT, KILL, STOP, CONT e 0.
Non particolarmente utile, soprattutto se non sai già cosa fa il segnale. Inoltre non è elencato dall'output di kill -l
, quindi non lo saprai a meno che non lo conosci già.
Sui sistemi Debian e Ubuntu, l'output di man 2 kill
dice, in parte:
Se sig è 0, non viene inviato alcun segnale, ma viene comunque eseguito il controllo degli errori; questo può essere usato per verificare l'esistenza di un ID processo o ID gruppo processo.
È possibile utilizzare kill -0
per verificare se un processo è in esecuzione. Considera questi esempi.
# 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: $?"
È inoltre possibile utilizzare kill -0
per determinare se l'utente corrente dispone delle autorizzazioni per segnalare un determinato processo. Per esempio:
# 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: $?"
kill(2)
Ecco lo snippet:The kill() function sends the signal specified by sig to pid, a process or a group of processes. Typically, Sig will be one of the signals specified in sigaction(2). A value of 0, however, will cause error checking to be performed (with no signal being sent). This can be used to check the validity of pid.
kill
pagina man: "Se sig è 0, non viene inviato alcun segnale, ma viene comunque eseguito il controllo degli errori."
Questo comando verifica se il processo con PID in $ pid è attivo.
$pid
potrebbe essere in esecuzione un processo con PID ma non si dispone dell'autorizzazione per inviare un segnale.
kill(1)
stamperà un errore diverso per ciascuno. Quindi, puoi dire se il pid è attivo indipendentemente dal fatto che tu abbia o meno le autorizzazioni per inviare segnali. Inoltre, l'uso tipico di kill -0
è vedere se il pid è vivo, anche se non è sempre usato correttamente. Direi che questa risposta è corretta (a parte l'ortografia).
kill -0 $pid
sarà lo stesso in entrambi i casi. Restituirà 1
quindi non si può dire senza analizzare l'uscita di kill
se il processo è in esecuzione o meno, se non si dispone dell'autorizzazione per inviare un segnale ad esso. EDIT: sì, lo so che viene utilizzato la maggior parte delle volte per verificare se un processo è attivo, ma questo è sbagliato a meno che tu non possa garantire di avere il permesso di inviare il segnale (ad esempio: essere root)
kill
bash incorporato (la domanda è taggata bash
) genera il tipo di errore su stderr e l'indicazione di un errore nel suo codice di ritorno. Cioè, "Questo comando controlla [se] il processo con PID in $ pid è attivo" è completamente corretto se si interpreta correttamente l'output. [Non avrei commentato se non avessi detto che hai dato -1 alla risposta. Il tuo commento è altrimenti valido].
Kill -0 $ pid è per verificare se il processo con pid è esistente o meno.
Fai attenzione quando usi 'kill -0 $ pid' per controllare l'esistenza del processo perché
Una volta terminato il processo previsto, il suo pid può essere assegnato a un altro processo appena creato. (Quindi non si può essere così sicuri che quel particolare processo sia vivo o meno)
In caso di processo di zombi, per cui il bambino sta aspettando che il genitore chiami l'attesa. Qui contiene $ pid e dà il risultato positivo mentre quel processo non è in esecuzione.
Uccidi -0 $ pid usato per verificare se un processo in esecuzione con $ pid è vivo o no. Ma questo può essere complicato, poiché l'ID processo può essere riassegnato, una volta che un processo viene chiuso e viene eseguito un nuovo processo. Si può usare killall -0 per capire se un particolare processo è in esecuzione o meno.
EXIT
segnale o 0
a un processo:stdout
caso di successo.stderr
se qualcosa non va.Più esplicitamente, una funzione utile per gli script della shell sarebbe:
function isProcess ()
{
kill -s EXIT $1 2> /dev/null
}
Questo non restituisce alcun testo in stdout
caso di successo, ma un messaggio di errore in stderr
caso di fallimento (ma ho reindirizzato quel messaggio di errore in /dev/null
).
Se sei preoccupato per lo stato del processo defunto / zombi , allora devi usarlo ps
, preferibilmente con l' --no-headers
interruttore.
#!/bin/ksh
function trim ()
{
echo -n "$1" | tr -d [:space:]
}
function getProcessStatus ()
{
trim $(ps -p $1 -o stat --no-headers)
}
function isZombie ()
{
typeset processStatus=$(getProcessStatus $1)
[[ "$processStatus" == "Z" ]]
return $?
}