2012-03-01 25 views
36

Tôi đang đặt một đường reaper vào một nhiệm vụ cào để tiêu diệt thêm một số nhiệm vụ ruby ​​sinh ra thêm vào khi họ bằng cách nào đó leo lên nhân dịp.Làm thế nào để lấy PID của nhiệm vụ cào hiện tại?

system "ps aux | grep 'namespace:taskname' | grep ruby | grep -v grep | awk '{print $2}' | xargs kill -9; echo 'Reaped old namespace:taskname processes.'" 

Tôi muốn thêm grep -v $PID_OF_CURRENT_TASK vào đó để đảm bảo rằng tôi không giết tác vụ hiện tại đang chạy.

Làm cách nào để nhận được PID đó?

+0

Bạn có thể thay thế toàn bộ đường ống với một cuộc gọi tốt soạn thảo của 'pkill' hoặc' killall', hoặc ít nhất là thay thế phần đầu của đường ống này với 'pgrep'. Các lệnh này an toàn hơn và dễ hiểu hơn đối với người đọc. – hagello

Trả lời

79

Bạn nhận được các PID hiện tại Ruby với Process.pid

+10

Ngoài ra còn có '$$' (xuất phát từ Perl lấy từ '/ bin/sh'). –

+1

Tôi quên mất điều đó. Nó khó hiểu hơn, nhưng đơn giản hơn. Nếu bạn 'yêu cầu" tiếng anh "', thì cũng có '$ PID' hoặc cái gì đó tương tự. – Linuxios

+1

Trong sự tò mò, sự khác nhau giữa 'pid',' ppid', 'uid',' euid', 'gid' và' egid' là gì? –

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