web-dev-qa-db-fra.com

Tuer un processus et attendre la fin du processus

Lorsque je démarre mon serveur tcp à partir de mon script bash, je dois tuer l'instance précédente (qui peut toujours écouter le même port) juste avant que l'instance actuelle ne commence à écouter.

Je pourrais utiliser quelque chose comme pkill <previous_pid>. Si je comprends bien, cela envoie simplement SIGTERM au pid cible. Lorsque pkill revient, le processus cible peut toujours être actif. Existe-t-il un moyen de laisser pkill attendre sa sortie?

26
woodings

Non. Ce que vous pouvez faire, c'est écrire une boucle avec kill -0 $PID. Si cet appel échoue ($? -ne 0), le processus est terminé:

while kill -0 $PID; do 
    sleep 1
done

(bravo à qbolec pour le code)

En relation:

23
Aaron Digulla

Utilisez wait (bash builtin) pour attendre la fin du processus:

 pkill <previous_pid>
 wait <previous_pid>
2
Roland Jansen