Ich habe zwei Skripte:
running_script
script_one
Ich muss die PID für die / alle Instanzen running_script
abrufen, die unter einem Benutzernamen ausgeführt werden, und dann pkill
die running_script
Prozesse und Tochter stoppen .
Wir haben so etwas erwartet wie:
ps -fu will | grep running_script
um den / die running_script
Prozess (e) zu finden. Wenn Sie jedoch die PID mit der Ausgabe des ps-Befehls vergleichen, wird der Befehl cmd wie folgt angezeigt : "bin / bash" für den running_script
Prozess.
running_script
wird als getrennter Prozess ( &
Operator) ausgeführt, der gestartet wird script_one
. Ich drucke die PIDs zu Beginn aus, um sie mit ps
der Ausgabe des Befehls zu vergleichen .
running_script &
echo $! -- $BASHPID
Im realen Anwendungsfall werden für einige running_script
Prozesse keine PIDs ausgeführt. Auch script_one
kann oder auch nicht ein abgetrenntes Verfahren aus dem seinem running_script
Elternteil.
Für die Zwecke der Übung werden script_one
nur Schleifen ausgeführt.
while [ true ]
do
echo " $0 - 35sec ..."
sleep 35
done
Dies ist jedoch nur das Beispiel. Die Anforderung besteht darin, die PID für die übergeordneten running_script
Prozesse zu erhalten.
Gibt es eine Option ps
oder einen anderen Befehl, der mir den Namen der Skriptdatei und die PID geben kann? Oder eine Methode, um einen Namen festzulegen , nach dem gesucht werden kann?
Im letzten Anwendungsfall kann es mehrere Fälle geben running_script
, in denen die Auswahl nach Namen die bisher beste Option ist.
Beispiel
Ich dachte, es könnte hilfreich sein, zu zeigen, was der ps
Befehl anzeigt, da die meisten Antworten zu glauben scheinen, dass dies funktionieren wird. Ich habe dieses Beispiel erst vor einiger Zeit ausgeführt.
$ ./running_script &
$ echo $! - $BASHPID
9047 - 3261
$ ps -ef | grep will
UID PID PPID C STIME TTY TIME CMD
will 8862 2823 0 22:48 ? 00:00:01 gnome-terminal
will 8868 8862 0 22:48 ? 00:00:00 gnome-pty-helper
will 8869 8862 0 22:48 pts/4 00:00:00 bash
* will 9047 3261 0 22:55 pts/2 00:00:00 /bin/bash
will 9049 9047 0 22:55 pts/2 00:00:00 /bin/bash
will 9059 2886 0 22:56 pts/0 00:00:00 man pgrep
will 9070 9059 0 22:56 pts/0 00:00:00 pager -s
will 10228 9049 0 23:31 pts/2 00:00:00 sleep 35
will 10232 8869 0 23:31 pts/4 00:00:00 ps -ef
will 10233 8869 0 23:31 pts/4 00:00:00 grep --colour=auto william
Ich habe PID # 9047 markiert, zeigt einfach: - will 9047 3261 0 22:55 pts / 2 00:00:00 / bin / bash
Gibt es so etwas wie ein " Jobname " -Attribut, das ich unter Linux festlegen könnte?
running_script
über die Befehlszeile / das Terminal angezeigt wird.
ps --version
-> "procps-ng version 3.3.9"
script1
?