Tuer et redémarrer plusieurs processus qui correspondent à un certain modèle

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.