2014-01-28 8 views
1

Я выбежала внешний python скрипт system(run_command)Как получить идентификатор процесса внешнего процесса

Но я хочу, чтобы получить идентификатор процесса сценария работает питона,

Так что я пытался использовать fork и получить идентификатор процесса ,

Но возвращенный pid был pid блока fork, а не процессом python.

Как я могу получить pid процесса python, спасибо.

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 

(Update)

Я пытался использовать метод икру.

Повторно настроенный pid по-прежнему не является pid запущенного процесса python.

Я получил ИДП 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:

Выполняет команду ... в субоболочке. command ... является одной из следующих форм.

Вы получите pid подоболочки, а не команду.


Как насчет использования Process#Spwan? Он возвращает pid подпроцесса.

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

Хорошо, я попробовал ваше решение, но это не сработало для меня. Я обновил сообщение с вашим решением. я неправильно понял ваше объяснение? – newBike

+0

@poc, Ах .. Вы запускаете команду через оболочку. 'pid' будет pid оболочки, а не команды. Вы должны вызвать программу напрямую, чтобы получить pid процесса. – falsetru

Смежные вопросы