как убить команду, выполняемую в xterm

Я хотел бы контролировать выполнение команд оболочки в окне xterm. Это пример кода (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?


person miluz    schedule 09.01.2017    source источник


Ответы (1)


Вам нужно найти PID процесса xterm, чтобы убить его. В вашем случае проще всего обойти процесс sh, так как он вам не нужен. Для этого вам нужно передать аргументы exec в виде массива, а не в виде командной строки:

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