Kann mir jemand sagen, wie ich die PID eines in bash ausgeführten Befehls erhalte.
Ich habe zB ein Bash-Skript, das imapsync ausführt.
Wenn das Skript beendet wird, wird der Imapsync-Prozess nicht immer beendet. Daher möchte ich in der Lage sein, die PID von Imapsync programmgesteuert in meinem Skript zu identifizieren, damit ich den Imapsync-Prozess selbst in einem Signalhandler beenden kann.
Wie kann ich die PID eines untergeordneten Prozesses programmgesteuert aus einem übergeordneten Bash-Skript abrufen?
Antworten:
Imapsync hat eine Option, um festzulegen, wo seine PID geschrieben wird:
--pidfile: Die Datei, in die die imapsync-PID geschrieben wird.
quelle
IOW enthält, genau wie
$$
Ihre PID,$!
die PID des zuletzt ausgeführten Hintergrundbefehls .quelle
/var/run/whatever.pid
. Möglicherweise gibt es eine Befehlszeilenoption, mit der Sie aufgefordert werden, die PID irgendwo zu speichern. Wenn nicht, klingt das nach einer Funktion, die Sie den Autor fragen oder die Sie selbst implementieren müssen.&
), ist die$!
Variable undefiniert./bin/sh -c 'echo $$>/tmp/my.pid && exec program args' &
- sysfault 24. november 10 um 14:28Im Gegensatz zu
pidof
,pgrep
kann eine Vielzahl von Optionen gegeben werden , zu beschränken , welche Prozesse es gibt PIDs für. Eine besonders nützliche Option ist die Auswahl basierend auf der PPID unter Verwendung der PID des aktuellen Prozesses.Die PIDs von imapsync werden nur ausgegeben, wenn sie untergeordnete Elemente Ihres Skripts sind.
quelle
Wie wäre es, wenn Sie Imapsync für einen Moment in den Hintergrund stellen, die PID abrufen und dann in den Vordergrund stellen ... Etwa so:
quelle