use POSIX qw/setsid/; $pid = fork(); if (!$pid) { setsid; # set our pgid to $$ system("sleep 30"); # just an example, put your xterm here } elsif (defined($pid)) { $SIG{ALRM} = sub { kill 'TERM', -$pid }; alarm 3; # .. do some stuff that will take longer than 3 seconds }