2017-01-09 10 views
0

Я хотел бы контролировать выполнение команд оболочки в окне xterm. Это пример кода (Ruby):как убить команду, выполненную в xterm

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

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

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