2011-01-05 7 views
0

Ich möchte folgendes tun:Kann ich einen Prozess in bash mit einer Datei verknüpfen?

ich so in eine Datei F, ein Prozess A verknüpfen möchten:

  • Wenn F eine Abstürze verschwindet.
  • F verschwindet erst, wenn A beendet ist.

Ist das möglich? Vielen Dank.

+0

Es wäre wahrscheinlich helfen, wenn Sie das, was Sie versuchen erreichen. –

+0

Ich möchte 2 Prozesse überwachen, also wenn einer von ihnen abstürzt, dann bringe auch den anderen zum Absturz. Ich habe gelesen, dass das Töten mit der PID kein guter Weg ist, da ein anderer Prozess mit der gleichen PID beginnen könnte. Aus diesem Grund suche ich nach einer Möglichkeit, die Verwendung von PIDs zu vermeiden. –

Antwort

0

Sie sollten PIDs nicht vermeiden. Sie sind Prozessbezeichner und sollen verwendet werden.

Bash überwacht automatisch die untergeordneten Prozesse, die gestartet werden. Die letzte Hintergrundprozess-ID wird in $! Beibehalten. Bash unterstützt auch Jobsteuerelemente mit der Syntax "% n".

Mit dem Trap SIGCHLD können Sie Statusänderungen für untergeordnete Prozesse abfangen, und Sie können warten, bis ein oder alle untergeordneten Prozesse mit dem Befehl wait abgeschlossen wurden.

Hier ist eine grobe Annäherung an Ihre zwei Prozessüberwachung, die von „job1“ besteht und „job2“ die das Beispielskript gestartet:

job1 & # start job1 in background 
j1pid=$! # get its process id 
job2 & # start job2 in background 
j2pid=$1 # get its process id 

trap 'err=1' ERR # trap all errors 
err= 
wait $j1pid # wait for job1 to complete 

# at this point job1 could have completed normally, 
# or either process could have had an error 

trap - ERR # revert to "normal" handling of most errors 

# kill the processes nicely, or abruptly 
# kill -TERM sends the TERM signal to the process, which it can trap 
# and do whatever pre-exit process is needed. 
# kill -9 cannot be trapped. 

for pid in $j1pid $j2pid ; do 
    kill -TERM $pid 2>/dev/null || kill -9 $pid 
done 
0

Sie haben bereits eine Datei mit fast dieser Eigenschaft auf Linux. Wenn Sie einen Prozess erstellt haben, wird/proc/procNum während des Prozesses existieren. Wenn Ihre Prozessnummer beispielsweise 1050 ist, wird/proc/1050 bis zum Prozesswürfel bestehen. Ich weiß nicht, ob das Entfernen dieser Datei den Prozess beenden wird, aber Sie können versuchen, beide zusammen zu binden.

+0

Danke für die Info! Ich habe es überprüft und es ist ein Verzeichnis mit vielen Dateien. Ich kann es nicht entfernen (auch wenn ich Sudo verwende), also kann ich nicht tun, wonach ich suche. Danke dir trotzdem :) –

Verwandte Themen