2013-07-27 23 views
10

Wenn ich meinen TCP-Server von meinem Bash-Skript starten, muss ich die vorherige Instanz (die immer noch auf den gleichen Port hören), kurz bevor die aktuelle Instanz zu hören beginnt.Kill einen Prozess und warten auf den Prozess zu beenden

Ich könnte etwas wie pkill <previous_pid> verwenden. Wenn ich es richtig verstehe, sendet es nur SIGTERM an die Ziel-PID. Wenn pkill zurückkehrt, ist der Zielprozess möglicherweise noch aktiv. Gibt es eine Möglichkeit, pkill warten zu lassen, bis es beendet wird?

+1

Können Sie die gleiche Frage stellen, aber in [unix.se] Site? – Braiam

+0

Hier ist meine Lösung, die auch für Dienste funktioniert: http://pastebin.com/VjpVNdz2. –

+0

Warum ist das "Off Topic"? Es ist eine Programmierfrage, die für die bash Programmiersprache relevant ist. – h22

Antwort

5

Verwenden wait (bash builtin) zu warten, bis der Prozess beendet ist:

pkill <previous_pid> 
wait <previous_pid> 
+12

warten, sagte "ist kein Pid dieser Shell", musste ich während ps -p $ nPid; do 1; done; ' –

+6

-1:' wait' funktioniert nur für Kinder der _current shell_, nicht beliebige Prozesse. Es gibt keinen allgemeinen eingebauten Mechanismus dafür. –

Verwandte Themen