2011-11-04 35 views
27

tôi thực hiện lệnh sauLàm thế nào để giết một quá trình nohup?

$ nohup ./tests.run.pl 0 & 

bây giờ khi tôi cố gắng để giết nó (và các hành được bắt đầu từ kịch bản này) sử dụng

$ kill -0 <process_id> 

nó không hoạt động. Làm thế nào tôi có thể giết chết một quá trình nohupped và các quá trình chạy qua kịch bản nohupped?

Cảm ơn

Trả lời

37

kill -0 không không giết quá trình này. Nó chỉ kiểm tra nếu bạn có thể gửi một tín hiệu cho nó.

Chỉ cần kill pid và nếu điều đó không hiệu quả, hãy thử kill -9 pid.

+0

nó hoạt động rất nhiều. – polerto

+1

@Mat, Tôi có cần phải nhận được id quá trình đầu tiên không? Nếu tôi chạy nhiều quy trình và muốn tiêu diệt tất cả cùng một lúc thì sao? Tôi đã thực hiện tính toán song song bằng cách sử dụng nhiều lõi, do đó, có 10 quá trình được gọi bởi "nohup". Tôi muốn giết tất cả. Bạn có thể vui lòng hướng dẫn tôi ở đây không? Cảm ơn. –

+0

tôi đã giết chết một quá trình nohup với kill -9, nhưng vẫn còn khi tôi chạy lệnh đuôi f nohup.out i m nhận nhật ký liên tục ... điều này có nghĩa là quá trình của tôi đang chạy..để làm gì ?? –

25

Đơn giản chỉ cần kill <pid> sẽ gửi SIGTERM, trong đó nohup sẽ không bỏ qua.

Bạn không nên gửi số SIGKILL trước vì điều đó cho phép quá trình không có cơ hội khôi phục; bạn nên thử những điều sau đây, theo thứ tự:

  • SIGTERM (15)
  • SIGINT (2)
  • SIGKILL (9)
+2

Hoàn toàn đúng. Một SIGKILL (kill -9) không thể bị bắt bởi bộ xử lý tín hiệu của quá trình. Điều này có nghĩa rằng bạn không thể viết bất kỳ mã epilog nào để xóa các tệp tạm thời và/hoặc tách bất kỳ phân đoạn bộ nhớ chia sẻ nào được cấp phát. Thất bại trong việc dọn dẹp bộ nhớ chia sẻ có nghĩa là bộ nhớ tổng thể ít hơn có sẵn cho các quy trình mới - một điều khó chịu. – JRFerguson

2

Nếu bạn không biết id quá trình và nó có thể chạy các lệnh khác nhau trong một trình bao (hoặc vòng lặp), bạn có thể chạy jobs -l để liệt kê các công việc và PID, sau đó là kill chúng.

Xem ví dụ:

[email protected]:/usr/share/etlservice/bin$ jobs -l 
[1] 27398 Running     nohup ./extract_assessor_01.sh > job1.log & 
[2] 27474 Running     nohup ./extract_assessor_02.sh > job2.log & 
[3] 27478 Running     nohup ./extract_assessor_03.sh > job3.log & 
[4]- 27481 Running     nohup ./extract_assessor_04.sh > job4.log & 
[5]+ 28664 Running     nohup ./extract_assessor_01.sh > job1.log & 
[email protected]:/usr/share/etlservice/bin$ sudo kill 27398 
sudo kill 27474[1] Terminated    nohup ./extract_assessor_01.sh > job1.log 
[email protected]:/usr/share/etlservice/bin$ sudo kill 27474 
[2] Terminated    nohup ./extract_assessor_02.sh > job2.log 
[email protected]:/usr/share/etlservice/bin$ sudo kill 27478 
[3] Terminated    nohup ./extract_assessor_03.sh > job3.log 
[email protected]:/usr/share/etlservice/bin$ sudo kill 27481 
[4]- Terminated    nohup ./extract_assessor_04.sh > job4.log 
[email protected]:/usr/share/etlservice/bin$ sudo kill 28664 
[5]+ Terminated    nohup ./extract_assessor_01.sh > job1.log 
[email protected]:/usr/share/etlservice/bin$ 
3

tôi sẽ làm một cái gì đó như:

jobs 

[1] + Running nohup ./tests.run.pl 

kill %1 
0

giết nohup quá trình

ps aux |grep nohup 

grep rằng PID kill -15 -1 16000 (sẽ đăng xuất bạn) và làm sạch trên gốc đăng nhập tiếp theo

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