In Kürze
Mit & und disown Sie ändern die PID des Prozesses nicht.
Wenn Sie es nicht in ps -p <YOURPID> sehen Ausgang, es läuft nicht mehr.
Sie können überprüfen es mit einem zusätzlichen echo $? nach ps (oder kill ) Befehl, um zu prüfen, ob das Programm mit einem anderen Exit-Code als 0 beendet wird (normalerweise 1 ).
Deine Befehle verstehen.
-
Hintergrund :wenn Sie den Befehl mit dem abschließenden
&starten Sie senden es im Hintergrund.
Das bedeutet:- Es ist in der Jobliste Ihrer Shell vorhanden (in Ihrem Beispiel ist dies die Nummer
[1]und Sie können darauf als%1verweisen; (probieren Sie den Befehljobs). - Sie können es mit
fgin den Vordergrund und in den Hintergrund bringen undbg. -
Es ist (noch) "im Besitz" durch die (mit der übergeordneten) Shell:wenn die Shell einen
SIGHUPempfängt signalisiert, wird einSIGHUPgesendet Signal an den Prozess.$ 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
- Es ist in der Jobliste Ihrer Shell vorhanden (in Ihrem Beispiel ist dies die Nummer
-
Ablehnen :mit dem Befehl
disownSie entfernen den Job aus der Jobliste der Shell, ändern aber nicht seine 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:00Beachten Sie dieselbe PPID (die Shell existiert noch).
Jetzt töten wir die Schale.$ 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 sleepEs gibt noch einen
PPID, die5339, das mit einem weiteren Aufruf vonps,ps -p 5339, werden Sie feststellen, dass es sich um eineinithandelt Beispiel:$ ps -p 5339 PID TTY TIME CMD 5339 ? 00:02:20 init
pstree :ein schneller Weg.
Sie können mit pstree sehen schneller.
Vor dem disown und kill the bash Befehle:
$ pstree -s -p 10795
init(1)───lightdm(1199)───lightdm(5259)───bash(8380)───sleep(10795)
Nach dem disown und kill the bash :
$ pstree -s -p 10795
init(1)───lightdm(1199)───lightdm(5259)───init(5339)───sleep(10795)
Hinweis: natürlich werden alle PIDs in Ihrem Fall anders sein ...
Wenn es nicht in ps auxf ist , dann läuft es nicht. Wenn Sie kill 29144 ausführen und erhalten "No such process", das bedeutet auch, dass der Prozess nicht läuft.
Jeder Prozess hat einen Ordner im /proc Dateisystem mit seinem pid . Wenn der Ordner nicht existiert, wird der Prozess nicht ausgeführt.
Zum Beispiel
/proc/29144/
Sie können den Prozess commandline anzeigen
cat /proc/29144/cmdline
Beispielausgabe:
/usr/sbin/smbd
oder überprüfen Sie den Status der Prozessdatei
stat /proc/29144/exe
Beispielausgabe:
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: -