J’essaie d’écrire un script shell qui va tuer tous les processus en cours d’exécution qui correspondent à un certain modèle, puis les redémarrer. Je peux afficher les processus avec:
ps -ef|grep ws_sched_600.sh|grep -v grep|sort -k 10
Ce qui donne une liste des processus pertinents:
user 2220258 1 0 16:53:12 - 0:01 /bin/ksh /../../../../../ws_sched_600.sh EDW02_env user 5562418 1 0 16:54:55 - 0:01 /bin/ksh /../../../../../ws_sched_600.sh EDW03_env user 2916598 1 0 16:55:00 - 0:01 /bin/ksh /../../../../../ws_sched_600.sh EDW04_env
Mais je ne sais pas trop comment transmettre les identifiants de processus pour tuer?
Le sort
ne semble pas nécessaire. Vous pouvez utiliser awk
pour imprimer la deuxième colonne et xargs
pour convertir la sortie en arguments de ligne de commande à kill
.
ps -ef | grep ws_sched_600.sh | awk '{print $2}' | xargs kill
Sinon, vous pouvez utiliser pkill
ou killall
qui tue selon le nom du processus:
pkill -f ws_sched_600.sh
pkill ws_sched_600.sh
Si vous êtes préoccupé par l’exécution de votre commande sur plusieurs plates-formes où pkill peut ne pas être disponible
ps -ef | awk '/ws_sched_600/{cmd="kill -9 "$2;system(cmd)}
Je pense que c’est ce que vous recherchez
for proc in $(ps -ef|grep ws_sched_600.sh|sort -k 10) do kill -9 proc done
modifier:
Bien sûr … utilisez xargs, c’est mieux.