From: Park Heesob Date: 2006-06-13T15:39:23+09:00 Subject: Re: win32-open3 module: giving a name to a Process Hi, >From: "Jatinder Singh" >Reply-To: ruby-talk@ruby-lang.org >To: ruby-talk@ruby-lang.org (ruby-talk ML) >Subject: Re: win32-open3 module: giving a name to a Process >Date: Tue, 13 Jun 2006 13:39:38 +0900 > >Hi, > >Now I need to create a process with a name(the process is an instance of >webrick server). >I can create a webrick instance using following command,(this is not a >blocking call, it returns immediately..thats what I want) >input, out, err, @pid = Open4.popen4('D:\ruby\bin\ruby >C:\InstantRails\rails_apps\app1\script\server -p 3002') > >Now at later point of time I would like to kill this process which I can >ofcourse do using >Process.kill(9, @pid) > >It may very well happen that process was killed externally, hence in that >case I am first finding out if process with @pid is still alive by calling >Process.kill(0,@pid) (it gives an error it the process is not alive, which >I >am catching) > >My assumption in above case is that the webrick instance I had created >earlier using popen4 method is still running with @pid; it may very well >happen that webrick instance was killed externally and @pid was taken up by >some other process; this will result in killing of a innocent process. >I was thinking if I could assign a name to a process and then later on >while >killing, verify the name, then that would solve the problem. >But how do I assign a name to a process while creating a process using >popen4 method and then how do I find the pid of a process by name. > > >Help is appreciated! > How about this: def get_cmd(pid) require 'win32ole' procs = WIN32OLE.connect("winmgmts:\\\\.") procs.ExecQuery( "SELECT CommandLine FROM Win32_Process WHERE ProcessId = #{pid} ","WQL").each { |p| return p.CommandLine } end cmd = 'D:\ruby\bin\ruby C:\InstantRails\rails_apps\app1\script\server -p 3002' input, out, err, @pid = Open4.popen4(cmd) if cmd == get_cmd(@pid) puts "Valid Process" Process.kill(0,@pid) else puts "Invalid Process" end Regards, Park Heesob