Ich möchte ein Shell-Skript wie das folgende haben:
my-app &
echo $my-app-pid
Aber ich weiß nicht, wie die pid des gerade ausgeführten Befehls erhalten wird.
Ich weiß, ich kann nur den jobs -p my-app
Befehl verwenden, um die PID zu greifen. Wenn ich die Shell jedoch mehrmals ausführen möchte, funktioniert diese Methode nicht. Weil die Jobspezifikation nicht eindeutig ist.
bash
shell
process
background-process
David S.
quelle
quelle
/bin/sh -c 'echo $$>/tmp/my.pid && exec program args' &
- sysfault 24. November '10 um 14:28 Uhrecho $!
my-app & myVar=$! ; fg
.fg
bringt den Prozess wieder in den Vordergrund. Ich kann dannecho $myVar
später drucken und bin mir ziemlich sicher, dass die my-app bereits fertig ist.Erhalten Sie
PID
:PID
In Variable speichern :Speichern Sie alle Instanzen
PID
in einer Textdatei:Speichern Sie die Ausgabe, Fehler und
PID
in getrennten Dateien:quelle
my-app
beendet wird und möglicherweise, noch schlimmer, ihre PID später wiederverwendet wird, Sie schlechte Informationen in Ihrer Datei haben. Ich denke nicht, dass diese Antwort wirklich viel Wert für die bestehende akzeptierte Antwort bringtsleep 4 | grep INVALID & export MY_PID=$!; fg; echo $MY_PID returned with $?
main &
ein Weg, um PID zu greifen?Versuchen Sie etwas wie
quelle
Versuchen Sie so etwas:
Wenn Sie den ersten Buchstaben Ihres Prozesses dazwischen setzen
[
]
, stellen Sie sicher, dass Sie dengrep
Prozess nicht in Ihre Liste aufnehmen. Bei Bedarf können Sie Ihrem Benutzernamen auch ein Grep hinzufügen.quelle
my-app
mehr als einmal ausgeführt wird - davidshen84 speziell über diese cas Sorgen.pgrep
stattdessen verwenden.