Popen getting pid of newly run process

我的梦境 提交于 2019-11-30 20:53:36

Since you are running it in the background (command &), you get the interpreter's PID:

>> pipe = IO.popen("xcalc &")
>> pipe.pid 
=> 11204

$ ps awx | grep "pts/8"
11204 pts/8    Z+     0:00 [sh] <defunct>
11205 pts/8    S+     0:00 xcalc

Drop the &:

>> pipe = IO.popen("xcalc")
>> pipe.pid
=> 11206

$ ps awx | grep "pts/8"
11206 pts/8    S      0:00 xcalc

For the additional issue with the redirection, see @kares' answer

it's not just about running it in the background but also due 2>&1

redirecting err/out causes IO.popen to put another process in front of your actual process ( pipe.pid won't be correct)

here's a detailed insight: http://unethicalblogger.com/2011/11/12/popen-can-suck-it.html

possible fix for this could be using exec e.g. IO.popen("exec firefox 'some_url' 2>&1")

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!