如何获得外部流程的pid

时间:2014-01-28 03:12:29

标签: ruby

我按python

运行了外部system(run_command)脚本

但是我想得到正在运行的python脚本的pid,

所以我尝试使用fork并获取pid,

但是返回的pid是fork的块的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

(更新)

我尝试使用spawn方法。

重新调整的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

1 个答案:

答案 0 :(得分:2)

根据Kernel#system

  

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

你将获得子shell的pid,而不是命令。


如何使用Process#Spwan?它返回子进程的pid。

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