Warum Jobs keine Befehle aus dem Skript auflisten

Warum Jobs keine Befehle aus dem Skript auflisten

Ich habe ein Skript, das einige Programme im Hintergrund ausführt, aber nach der Ausführung werden sie nicht beim Befehl „Jobs“ aufgelistet. Warum ist das so?

(./m_prog -t m_prog1 m_config) &
(./m_prog  -t m_prog2  m_config) &
(./m_prog  -t m_prog3  m_config) &

Aber wenn ich jeden von ihnen vom Terminal aus ausführe, erscheinen sie in "Jobs".

Wie kann ich mit in einem Skript ausgeführten Befehlen denselben Effekt erzielen?

Antwort1

jobs funktioniert nur für die Instanziierung der Shell, die die Jobs erstellt hat. jobs nVerwenden Sie Zahlen, nicht die PID. Sobald die Shell in einem Skript (einem anderen neuen Prozess) ausgeführt wird, kann die alte Shell, die das Skript gestartet hat, jobs (in der alten Shell ausgegeben) nicht mehr auf Job Nr. 1 in der neuen Shell verweisen.

Warum? Weil die aktuelle Shell ihren eigenen Job Nr. 1 haben könnte. UNIX/Linux verwaltet eine sogenannte Prozessgruppe oder Sitzung. Der Gruppenleiter der Sitzung ist der Prozess, dem das TTY gehört und der über die Tastatur mit ihm interagiert. Schlagen Sie die Beschreibung der Funktion setsid() in Ihrem Handbuch nach. Wenn der Prozess gestartet wurde und noch als untergeordneter Prozess unter der alten übergeordneten Shell – dem Leiter – läuft, funktioniert der Befehl jobs. Andernfalls nicht.

verwandte Informationen