Ich habe ein Shell-Skript, das einigermaßen einfach ist.
#!/bin/sh
do something boring...
Wenn ich das Shell-Skript wie folgt ausführe,
$ nohup sh mysh.sh > /null/dev/ 2>&1 &
Ich sehe, dass zwei Prozesse aufgelistet sind.
$ ps -ef | grep mysh
... xxxxx 1 ... sh mysh.sh // same xxxxx
... yyyyy xxxxx ... sh mysh.sh // same xxxxx
Ist das normal?
Antwort1
Ich habe gerade das, was Sie hier haben, neu erstellt und do something boring...
durch ersetzt sleep 10000
, und das ist nicht passiert. Ich glaube, Sie tun etwas, das fork() oder clone() verwendet, um einen untergeordneten Prozess zu erstellen. Ich hatte vermutet, dass nohup den Prozess als untergeordneten Prozess ausgeführt hat, aber das scheint nicht der Fall zu sein.
Antwort2
Wie Sie sehen, ist yyyyy der untergeordnete Prozess von xxxxx. Es ist völlig normal, dass dasselbe Shell-Skript innerhalb von „mysh.sh“ ausgeführt wird, was zu einem solchen Szenario führt.
Rufen Sie mysh.sh direkt/indirekt im Skript auf? Das ist meiner Meinung nach die einzige Möglichkeit, wie dies jemals passieren könnte.