Hello Monks,
I have a perl Expect script that spawns a shell with "sudo su" and then runs an openvpn client on that shell. However, I am having problems terminating the openvpn client (followed by the expect spawned object). The relevant code I am using:
$cmd = "kill -INT $vpnpid";
KILLVPN:
print "Sending kill commands to child processes:\n$cmd\n";
$exp1->send_slow("$cmd\n");
sleep 3;
my $ps = `ps -p $vpnpid | grep -v grep | grep -v TTY`;
if ($ps =~ /\w+/) {
print "VPN process $vpnpid not dead yet\n $ps \nSending kill -
+TERM\n";
$cmd = "kill -TERM $vpnpid";
goto KILLVPN;
}
$exp1->hard_close();
On the output I see:
Got command prompt: [root@fc10-test perl]# Sending kill commands to ch
+ild processes:
kill -INT 3006
VPN process 3006 not dead yet
3006 pts/4 00:00:00 openvpn
Sending kill -TERM
Sending kill commands to child processes:
kill -TERM 3006
VPN process 3006 not dead yet
3006 pts/4 00:00:00 openvpn
...
Now if I issue the "kill -TERM 3006" from a shell, it kills the process and my script ends gracefully, but somehow it is not working within the expect shell. Please note that the expect shell is running as root (just as I am when execting the command from another shell).
TIA