in reply to start and kill a process in a local shell
In my scenario, I had a perl script starting up and managing a unix process on a Sun workstation. Anytime I hit ctl-z at my shell prompt (the shell that started the perl script), both the perl script and the background unix process stopped. This is not what I wanted at all.
After much gnashing of teeth and tearing out hair (I should have asked here), I finally figured out that the SIGSTOP was being sent to everyone in my process group. To solve the problem, I needed to create the unix process in its own process group. This is how I learned about the wonders of the perl "setpgrp" command, and process groups in general.
So here is my code:
Hope that helps.# Fork a unix process... my $pid; if($pid = fork) { print STDERR "parent pid=$$ child pid=$pid\n"; }elsif (defined $pid) { print STDERR "child pid=$$ pid=$pid\n"; # Must do setpgrp as child for nohup and job control stuff... setpgrp(0, $$); exec $unixcmd || die "Bad exec $!"; } kill 'INT', $pid;
-Craig
UPDATE:
oha opened my mind, by letting me know that the setpgrp could be done from either the parent or the child process. oha++ Thanks!
|
|---|