2013-07-27 44 views
10

Khi tôi khởi động máy chủ tcp từ tập lệnh bash của mình, tôi cần phải hủy phiên bản trước (có thể vẫn đang nghe cùng một cổng) ngay trước khi phiên bản hiện tại bắt đầu lắng nghe.Giết một quá trình và chờ quá trình thoát

Tôi có thể sử dụng một cái gì đó như pkill <previous_pid>. Nếu tôi hiểu chính xác, điều này chỉ gửi SIGTERM đến pid mục tiêu. Khi trả về pkill, quá trình đích có thể vẫn còn hoạt động. Có cách nào để cho phép pkill đợi cho đến khi thoát ra không?

+1

bạn có thể thực hiện cùng một câu hỏi nhưng trong [unix.se] trang web? – Braiam

+0

Đây là giải pháp của tôi hoạt động cho các dịch vụ: http://pastebin.com/VjpVNdz2. –

+0

Tại sao "chủ đề tắt" này? Nó là một câu hỏi lập trình liên quan đến ngôn ngữ lập trình bash. – h22

Trả lời

5

Sử dụng wait (bash dựng sẵn) để chờ cho quá trình này để kết thúc:

pkill <previous_pid> 
wait <previous_pid> 
+12

chờ đợi nói "không phải là một pid của vỏ này", tôi đã phải 'trong khi ps-p $ nPid; ngủ 1, thực hiện; ' –

+6

−1:' wait' chỉ hoạt động đối với trẻ em của shell_ hiện tại, không phải các quy trình tùy ý. Không có cơ chế tích hợp chung cho việc này. –

Các vấn đề liên quan