I'd like to control the execution of shell commands within an xterm window. This is an example code (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
However, the xterm window doesn't get killed:
$ ./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
How can the xterm window be killed?
                        
You need to find the PID of the xterm process in order to kill it. In your case, the easiest way would be to bypass the
shprocess, as you don't need it. To do this, you have to pass the arguments toexecin an array, not as a command line: