如何终止在 xterm 中执行的命令

how to kill a command executed within xterm

我想在 xterm window 中控制 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 window 没有被杀死:

$ ./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 window 怎么杀?

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

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