Qu'est-ce que tuer -0 $pid " dans un shell script?
Fondamentalement, ce signal est '0' représentent, parce que ici je vois SIGNAL de numéros commençant par 1.
- linux.die.net/man/1/kill
- Voir aussi le Unix.SE variante de cette question, qui diffère de
kill 0
(pas de tiret), a expliqué ici et ici.
Vous devez vous connecter pour publier un commentaire.
l'envoi d'un signal
0
à unPID
vérifie juste si un processus avec lePID
est en cours d'exécution et que vous avez l'autorisation d'envoyer un signal à elle.Pour plus d'informations, consultez les pages de manuel suivantes:
tuer(1)
kill(2)
man 2 kill
à la place.man 1 kill
etman 2 kill
eu sur ma Fedora 20 système. Il est difficile de repérer si, enterrés dans ces deux pages de 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.htmlman 2 kill
est en dehors de la 1er amendement 🙂C'est une Bonne Question, Parce que...
...il peut être difficile de trouver de la documentation sur ce signal spécial. En dépit de ce que les autres ont dit, la seule mention de ce signal dans les
man 1 kill
dans les systèmes basés sur Debian est:Pas particulièrement utile, surtout si vous ne connaissez pas déjà ce que le signal ne. Il n'est pas répertorié par la sortie de
kill -l
, de sorte que vous ne savez pas à ce sujet, sauf si vous savez déjà cela.Où le Trouver Documenté
Sur Debian et Ubuntu systèmes, la sortie de
man 2 kill
dit, en partie:Ce que C'est Bon Pour
Vous pouvez utiliser
kill -0
pour vérifier si un processus est en cours d'exécution. Considérez ces exemples.Vous pouvez également utiliser
kill -0
pour déterminer si l'utilisateur possède les autorisations pour signaler un processus donné. Par exemple:kill(2)
Voici l'extrait: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
homme page: "Si sig est égal à 0, aucun signal n'est envoyé, mais la vérification des erreurs est toujours pratiquée."Cette commande vérifie si le processus avec le PID dans $pid est vivant.
$pid
peut être en cours d'exécution, mais vous n'avez pas la permission d'envoyer un signal à elle.kill(1)
imprime une erreur différente pour chacun. Ainsi, vous pouvez savoir si le pid est vivant, indépendamment de savoir si vous disposez des autorisations d'émettre des signaux ou pas. En outre, l'utilisation typique dekill -0
est de voir si le pid est vivant, même s'il n'est pas toujours utilisé correctement. Je dirais que cette réponse est correcte (en dehors de l'orthographe).kill -0 $pid
sera le même dans les deux cas. Il sera de retour1
de sorte que vous ne peut pas dire sans l'analyse de la sortie dekill
si le processus est en marche ou pas, si vous n'avez pas la permission d'envoyer un signal à elle. EDIT: oui je sais que c'est utilisé la plupart du temps pour vérifier si un processus est en vie, mais c'est faux, sauf si vous pouvez garantir que vous avez l'autorisation d'envoyer le signal (par exemple: être root)kill
intégrée à bash (la question est balisébash
) sorties le type d'erreur sur stderr, et l'indication d'une erreur dans son code de retour. Qui est, "Cette commande vérifie [si] le processus avec le PID dans $pid est vivant" est tout à fait correct si vous interpréter les résultats correctement. [Je n'aurais pas commenté si vous ne dites pas que vous avez donné à -1 pour la réponse. Votre commentaire est par ailleurs valide].Tuer -0 $pid est de vérifier si le processus avec le pid est existant ou pas.
Être prudent lors de l'utilisation de tuer -0 $pid " pour vérifier le processus d'existence, car
Une fois le processus de sortie puis son pid peut être affecté à d'autres processus créé récemment. ( Donc on ne peut être sûr que les processus particulier est vivant ou pas )
En cas de Zombie processus, pour lesquelles l'enfant est en attente pour les parents à l'appel en attente. Ici, elle est la $pid et donner le résultat positif alors que ce processus n'est pas en cours d'exécution.
Tuer -0 $pid utilisé pour vérifier si un processus en cours d'exécution avec $pid est vivant ou pas. Mais cela peut être difficile, comme ID de processus peut être réaffectés, une fois qu'un processus de sortie et de nouveaux processus s'exécute.
On peut utiliser la commande killall 0 à obtenir sur un processus particulier est en cours d'exécution ou non.