Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

Re^2: Forking an operative terminal

by perlgrim (Initiate)
on Dec 31, 2012 at 17:09 UTC ( #1011081=note: print w/ replies, xml ) Need Help??


in reply to Re: Forking an operative terminal
in thread Forking an operative terminal

Hey! it works!

The third option you suggested does the job, using as well sh or bash as xterm or gnome-terminal. I include the code:

... $tks->signal_connect( 'clicked' => sub { my $command = "tw pro:$currproj"; my $ret = fork(); if($ret == 0) { # this is the fork: become $command and go away. exec("gnome-terminal", "-e", "bash -c '$command; bash'"); } else { # this is the parent: do nothing and go ahead. } return FALSE; } );

I detect zombie processes remaining in my ps -e:

2504 ? 00:00:01 perl 2509 ? 00:00:01 gnome-terminal <defunct> 2573 ? 00:00:01 gnome-terminal <defunct> 2638 ? 00:00:01 gnome-terminal <defunct> 2702 ? 00:00:01 gnome-terminal <defunct> 2767 ? 00:00:00 gnome-terminal 2773 ? 00:00:00 gnome-pty-helpe
that dissapear when the perl script comes to en end. Thank you very much, Anonymous Wisdom.


Comment on Re^2: Forking an operative terminal
Select or Download Code
Re^3: Forking an operative terminal
by Anonymous Monk on Dec 31, 2012 at 19:03 UTC

    You can get rid of the defunct processes by setting $SIG{CHLD} = 'IGNORE' in the parent. Also, you should use sh -c instead of bash -c in "bash -c '$command; bash'", since only sh is guaranteed to exist.

    And the user's shell can be found with this piece of code:

    my ($shell, $uid); while (($uid, $shell) = (getpwent)[2,8]) { last if $uid == $<; } say $shell;

      Fine, I was trying to place an 'exit' into the exec to solve the problem, but the signal handler worked perfectly and sent the zombies back to their niches. As well as the code for user shell determination. Thanks again, your Wisdom.

      I also want to apologize because now I realize that my question concerned the shell and OS, not perl. Happy New Year to all the Monastery.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1011081]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (11)
As of 2014-08-02 09:34 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Who would be the most fun to work for?















    Results (55 votes), past polls