En bref
Avec & et disown vous ne modifiez pas le PID du processus.
Si vous ne le voyez pas dans le ps -p <YOURPID> sortie, il ne tourne plus.
Vous pouvez survérifier avec un echo $? supplémentaire après le ps (ou kill ) commande, vérifiant si le programme se termine avec un code de sortie différent de 0 (généralement 1 ).
Comprendre vos commandes.
-
Contexte :lorsque vous lancez la commande avec le
&final vous l'envoyez en arrière-plan.
Cela signifie que :- Il est présent dans la liste des jobs de votre shell (dans votre exemple c'est le numéro
[1]et vous pouvez vous y référer en tant que%1; (essayez la commandejobs). - Vous pouvez l'amener au premier plan et en arrière-plan avec
fgetbg. -
Il est (toujours) "possédé" par le shell (lié au parent) :si le shell reçoit un
SIGHUPsignal, il enverra unSIGHUPsignal au processus aussi.$ sleep 1h & [1] 10795 $ jobs [1]+ running sleep 1h & $ ps -l -p 10795 F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 0 S 1000 10795 8380 0 80 0 - 3107 hrtime pts/57 00:00:00 sleep
- Il est présent dans la liste des jobs de votre shell (dans votre exemple c'est le numéro
-
Renier :avec la commande
disownvous supprimez le travail de la liste des travaux du shell, mais vous ne modifiez pas son PID.$ disown $ jobs # <---- No jobs $ ps -l -p 10795 F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 0 S 1000 10795 8380 0 80 0 - 3107 hrtime pts/57 00:00:00Notez le même PPID (le shell existe toujours).
Maintenant, nous tuons la coquille.$ kill 8380 # Here we kill the shell $ ps -l -p 10795 F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 0 S 1000 10795 5339 0 80 0 - 3107 hrtime pts/57 00:00:00 sleepIl y a un autre
PPID, le5339, cela avec une autre invocation deps,ps -p 5339, vous découvrirez que vous êtes uninitinstance :$ ps -p 5339 PID TTY TIME CMD 5339 ? 00:02:20 init
pstree :un moyen plus rapide.
Vous pouvez voir avec pstree plus rapidement.
Avant le disown et tuez le bash commandes :
$ pstree -s -p 10795
init(1)───lightdm(1199)───lightdm(5259)───bash(8380)───sleep(10795)
Après le disown et tuez le bash :
$ pstree -s -p 10795
init(1)───lightdm(1199)───lightdm(5259)───init(5339)───sleep(10795)
Remarque : bien sûr tous les PID dans votre cas seront différents...
Si ce n'est pas dans ps auxf , alors il ne fonctionne pas. Si vous exécutez kill 29144 et obtenez "Aucun processus de ce type", cela signifie également que le processus n'est pas en cours d'exécution.
Chaque processus a un dossier dans le /proc système de fichiers avec son pid . Si le dossier n'existe pas, le processus n'est pas en cours d'exécution.
Par exemple
/proc/29144/
vous pouvez voir le processus commandline
cat /proc/29144/cmdline
exemple de sortie :
/usr/sbin/smbd
ou vérifier l'état du fichier de processus
stat /proc/29144/exe
exemple de sortie :
File: /proc/29144/exe -> /usr/sbin/smbd
Size: 0 Blocks: 0 IO Block: 1024 symbolic link
Device: 3h/3d Inode: 78497 Links: 1
Access: (0777/lrwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-04-07 12:18:01.719011505 +0200
Modify: 2017-04-07 12:18:01.369010535 +0200
Change: 2017-04-07 12:18:01.369010535 +0200
Birth: -