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%1
verweisen; (probieren Sie den Befehljobs
). - Sie können es mit
fg
in den Vordergrund und in den Hintergrund bringen undbg
. -
Es ist (noch) "im Besitz" durch die (mit der übergeordneten) Shell:wenn die Shell einen
SIGHUP
empfängt signalisiert, wird einSIGHUP
gesendet 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
disown
Sie 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:00
Beachten 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 sleep
Es gibt noch einen
PPID
, die5339
, das mit einem weiteren Aufruf vonps
,ps -p 5339
, werden Sie feststellen, dass es sich um eineinit
handelt 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: -