Tuer un processus et attendre la fin du processus

Lorsque je lance mon serveur TCP à partir de mon script bash, je dois tuer l’instance précédente (qui peut encore écouter le même port) juste avant que l’instance en cours ne commence à écouter.

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

Non, vous pouvez é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:

  • Que fait kill -0 $ pid dans un script shell?

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

  pkill  wait