2014-01-28 89 views
1

我通過system(run_command)如何獲得外部進程的

跑到外部python腳本的PID,但我想要得到的運行python腳本的PID,

所以我試圖用fork並得到PID ,

但返回的PID是fork的block的pid,而不是python進程。

我怎麼能得到Python進程的PID,謝謝。

enter image description here

arguments=[ 
"-f #{File.join(@public_path, @streaming_verification.excel.to_s)}", 
"-duration 30", 
"-output TEST_#{@streaming_verification.id}" 
] 
cmd = [ "python", 
@automation[:bin], 
arguments.join(' ') 
] 
run_command = cmd.join(' ').strip() 

task_pid = fork do 
    system(run_command) 
end 

(更新)

我試圖使用產卵方法。

重新調整的PID仍然不是正在運行的Python進程的PID。

我得到了PID 5177,但實際PID控制,我想,是5179

run.sh

./main.py -f ../tests/test_setting.xls -o testing_`date +%s` -duration 5 

sample.rb

cmd = './run.sh' 
pid = Process.spawn(cmd) 
print pid 
Process.wait(pid) 

enter image description here

enter image description here

回答

2

根據Kernel#system

在子shell執行命令。命令...是以下形式之一。

您將獲得子shell的pid,而不是命令。


怎麼樣使用Process#Spwan?它返回子進程的PID。

run_command = '...' 
pid = Process.spawn(cmd) 
Process.wait(pid) 
+0

嗯,我試過你的解決方案,但它沒有爲我工作。我用你的解決方案更新了這篇文章。我誤解了你的探索嗎? – newBike

+0

@poc,啊..你通過shell運行命令。 'pid'將是shell的pid,而不是命令。您應該直接調用該程序來獲取進程的PID。 – falsetru