it-swarm.com.de

Shell-Skript zum Erfassen der Prozess-ID und zum Beenden, falls vorhanden

Ich habe diesen Code ausprobiert und funktioniert nicht

#!/bin/sh

#Find the Process ID for syncapp running instance

PID=`ps -ef | grep syncapp 'awk {print $2}'`

if [[ -z "$PID" ]] then
Kill -9 PID
fi

Es zeigt einen Fehler in der Nähe von awk.

Irgendwelche Vorschläge bitte.

53
user1597811

In der Tat wäre das der einfachste Weg, Kill-Argumente wie folgt weiterzugeben:

ps -ef | grep your_process_name | grep -v grep | awk '{print $2}' | xargs kill

Ich hoffe es hilft.

123
Anthony Mutisya

Das funktioniert gut für mich.

 PID = `ps -eaf | grep syncapp | grep -v grep | awk '{print $ 2}' `
 if [[" "! =" $ PID "]]; dann
 Echo "$ PID töten" 
 töte -9 $ PID 
 fi 
12
N Dierauf

Ich benutze dazu den Befehl pkill:

NAME
       pgrep, pkill - look up or signal processes based on name and 
       other attributes

SYNOPSIS
       pgrep [options] pattern
       pkill [options] pattern

DESCRIPTION
       pgrep looks through the currently running processes and lists 
       the process IDs which match the selection criteria to stdout.
       All the criteria have to match.  For example,

              $ pgrep -u root sshd

       will only list the processes called sshd AND owned by root.
       On the other hand,

              $ pgrep -u root,daemon

       will list the processes owned by root OR daemon.

       pkill will send the specified signal (by default SIGTERM) 
       to each process instead of listing them on stdout.

Wenn Ihr Code über Interpreter (Java, Python, ...) ausgeführt wird, ist der Name des Prozesses der Name des Interpreters. Sie müssen das Argument - full verwenden. Dies stimmt mit dem Befehlsnamen und den Argumenten überein.

9
guettli

Sie wollten wahrscheinlich schreiben

`ps -ef | grep syncapp | awk '{print $2}'`

aber ich werde die Antwort von @ PaulR unterstützen - killall -9 syncapp ist eine viel bessere Alternative.

4
Amadan

Viele * NIX-Systeme haben auch eines oder beide von pkill (1) und killall (1) , wodurch Sie Prozesse nach Namen abbrechen können. Mit ihnen können Sie das ganze ps-Problem der Analyse vermeiden.

1
jbr

Kam irgendwo hinüber ... dachte, es sei einfach und nützlich

Sie können den Befehl direkt in crontab verwenden.

* * * * * ps -lf | grep "user" |  Perl -ane '($h,$m,$s) = split /:/,$F
+[13]; kill 9, $F[3] if ($h > 1);'

oder wir können es als Shell-Skript schreiben,

#!/bin/sh
# longprockill.sh
ps -lf | grep "user" |  Perl -ane '($h,$m,$s) = split /:/,$F[13]; kill
+ 9, $F[3] if ($h > 1);'

Und nenne es Crontab so,

* * * * * longprockill.sh
0
user3743785

Dies sollte alle Prozesse beenden, die mit dem grep übereinstimmen, den Sie töten dürfen.

-9 bedeutet "Töte alle Prozesse, die du töten kannst".

kill -9 $(ps -ef | grep [s]yncapp | awk '{print $2}')
0
EvR2f
#!/bin/sh

#Find the Process ID for syncapp running instance

PID=`ps -ef | grep syncapp 'awk {print $2}'`

if [[ -z "$PID" ]] then
--->    Kill -9 PID
fi

Nicht sicher, ob dies hilft, aber "kill" ist nicht richtig geschrieben.

Versuchen Sie stattdessen "töten".

0
AnonManon