如何杀死在xterm中执行的命令

时间:2017-01-09 11:19:10

标签: ruby linux process xterm

我想在xterm窗口中控制shell命令的执行。 这是一个示例代码(Ruby):

pid = Process.fork
if pid.nil? 
  exec "xterm -e 'while true; do echo -n .; sleep 1; done'"
else
  puts "pid is: #{pid}"
  Process.detach(pid)
end

然而,xterm窗口并没有被杀死:

$ ./tst2.rb 
pid is: 26939
$ ps aux | grep xterm | grep -v grep
user   26939  0.0  0.0   4508   800 pts/3    S    13:11   0:00 sh -c xterm -e 'while true; do echo -n .; sleep 1; done'
user   26943  0.6  0.0  72568  6280 pts/3    S    13:11   0:00 xterm -e while true; do echo -n .; sleep 1; done
$ kill 26939
$ ps aux | grep xterm | grep -v grep
user   26943  0.1  0.0  72568  6280 pts/3    S    13:11   0:00 xterm -e while true; do echo -n .; sleep 1; done

如何杀死xterm窗口?

1 个答案:

答案 0 :(得分:1)

您需要找到xterm进程的PID才能终止它。在您的情况下,最简单的方法是绕过sh进程,因为您不需要它。为此,您必须将参数传递给数组中的exec,而不是作为命令行:

exec('xterm', '-e', 'while true; do echo -n .; sleep 1; done')