You can, as you suggest, give the forked process, a unique name, and kill the process later by searching for the pid of the name
#!/usr/bin/perl -w use strict; use Proc::ProcessTable; my $t1 = new Proc::ProcessTable; my $pid; my $commandline = shift || $0; foreach my $p (@{$t1->table}){ if($p->cmndline =~ /\Q$commandline\E/){ $pid = $p->pid; print "$pid\n"; } } ###################################################
The one thing to watch out for, is quite often, you get the pid of a shell (like bash or sh) which runs your external process... so you often need to kill the pid and all it's children, to get the whole shebang killed.
...this may be useful, as a guide
also look at rsync with tk progressbar for some ideas for tracking down child processes#!/usr/bin/perl -w use strict; use Proc::ProcessTable; #-- #-- we will ignore the child #-- $SIG{CHLD} = 'IGNORE'; #-- #-- create 5 child processes for demo purpose. arrange them so they st +ay #-- long enough so we can find them later #-- for(1..5){ sleep(10) and exit if(fork == 0); } #-- #-- list all process running in your machine and find all #-- child process #-- for my $p (@{new Proc::ProcessTable->table}){ print $p->pid," child of $$\n" if($p->ppid == $$); }
In reply to Re: how to kill deattached process
by zentara
in thread how to kill deattached process
by baxy77bax
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |