in reply to Killing of ALL children made by Open3
IPC::Open3 returns the PID of the process it creates, so you can simply remember that and kill it later. For example:
#!/usr/bin/perl -w use strict; use IPC::Open3; { my %pidlist; sub my_open3 { my $pid=open3(@_); $pidlist{$pid}=1 if $pid; warn "my_open3: Started process $pid\n"; $pid; } sub my_killkids { my($signal) = shift; warn "my_killkids: Killing processes ",join(" ",keys %pidlist),"\n +"; kill $signal, keys %pidlist; } sub my_chld { my $pid = wait; warn "my_chld: Child $pid finished.\n"; delete $pidlist{$pid}; } } $SIG{CHLD} = \&my_chld; my_open3(\*STDOUT,\*STDIN,\*STDOUT,"sleep 10"); my_open3(\*STDOUT,\*STDIN,\*STDOUT,"sleep 10"); my_open3(\*STDOUT,\*STDIN,\*STDOUT,"sleep 10"); my_killkids('INT'); sleep(1); sleep(1); sleep(1); my_killkids('KILL');
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Re: Killing of ALL children made by Open3
by Anonymous Monk on Nov 12, 2003 at 19:51 UTC | |
by sgifford (Prior) on Nov 12, 2003 at 21:03 UTC | |
by Anonymous Monk on Nov 17, 2003 at 20:43 UTC |