RE: OT:UNIX: Anyway to run this in the background and return to ca
Title: Message #!/usr/bin/perluse strict;use bytes;my $pid=0;if (!defined ($pid=fork())) { die "Problem with cutlery:$!\n"}elsif ($pid) { print "Do stuff here\n"; waitpid($pid,0); print "Cutlery is back\n"; }else { open(SPY,"ps -ef|grep sqlplus|"); while () { print;} } --Mladen GogalaOracle DBA -Original Message-From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of [EMAIL PROTECTED]Sent: Friday, August 22, 2003 1:25 PMTo: Multiple recipients of list ORACLE-LSubject: RE:OT:UNIX: Anyway to run this in the background and return to ca $ORACLE_HOME/bin/sqlplus "/ as sysdba" << EOD select .. exit EOD echo "this is a test" ps -ef|grep sqlplus I wish to put that into a unix command but at the same time run it in the background and return back to the parent script to do some other stuff? Anyone done this? Note: This message is for the named person's use only. It may contain confidential, proprietary or legally privileged information. No confidentiality or privilege is waived or lost by any mistransmission. If you receive this message in error, please immediately delete it and all copies of it from your system, destroy any hard copies of it and notify the sender. You must not, directly or indirectly, use, disclose, distribute, print, or copy any part of this message if you are not the intended recipient. Wang Trading LLC and any of its subsidiaries each reserve the right to monitor all e-mail communications through its networks. Any views expressed in this message are those of the individual sender, except where the message states otherwise and the sender is authorized to state them to be the views of any such entity.
RE: OT:UNIX: Anyway to run this in the background and return to ca
Title: Message Errrm - this script doesn't do what I think you're trying to do. Perl starts, it forks a child process, the parent process "does a bunch of stuff", but the child process only runs ps once. S, you end up with a zombie child process (until the parent is done with its business) and a parent process that is doing all the work. A better solution would be to reverse the ps and the "doing stuff". Let the child process do the dirty work and let the parent focus on either generating more children or status monitoring the existing children. You could use a loop that watches for the existence of a particular pid or has a set condition and add a SIGCHLD handler that will handle cleanup of the child and remove the loop condition. Thanks, Matt --Matthew ZitoGridApp SystemsEmail: [EMAIL PROTECTED]Cell: 646-220-3551Phone: 212-358-8211 x 359http://www.gridapp.com -Original Message-From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Mladen GogalaSent: Friday, August 22, 2003 2:04 PMTo: Multiple recipients of list ORACLE-LSubject: RE: OT:UNIX: Anyway to run this in the background and return to ca #!/usr/bin/perluse strict;use bytes;my $pid=0;if (!defined ($pid=fork())) { die "Problem with cutlery:$!\n"}elsif ($pid) { print "Do stuff here\n"; waitpid($pid,0); print "Cutlery is back\n"; }else { open(SPY,"ps -ef|grep sqlplus|"); while () { print;} } --Mladen GogalaOracle DBA -Original Message-From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of [EMAIL PROTECTED]Sent: Friday, August 22, 2003 1:25 PMTo: Multiple recipients of list ORACLE-LSubject: RE:OT:UNIX: Anyway to run this in the background and return to ca $ORACLE_HOME/bin/sqlplus "/ as sysdba" << EOD select .. exit EOD echo "this is a test" ps -ef|grep sqlplus I wish to put that into a unix command but at the same time run it in the background and return back to the parent script to do some other stuff? Anyone done this? Note: This message is for the named person's use only. It may contain confidential, proprietary or legally privileged information. No confidentiality or privilege is waived or lost by any mistransmission. If you receive this message in error, please immediately delete it and all copies of it from your system, destroy any hard copies of it and notify the sender. You must not, directly or indirectly, use, disclose, distribute, print, or copy any part of this message if you are not the intended recipient. Wang Trading LLC and any of its subsidiaries each reserve the right to monitor all e-mail communications through its networks. Any views expressed in this message are those of the individual sender, except where the message states otherwise and the sender is authorized to state them to be the views of any such entity.
RE: OT:UNIX: Anyway to run this in the background and return to ca
Title: Message No, I just wanted to demonstrate the fork mechanism in perl. The proper way to handle stuff would be to call exit at the end of the child process, which would clean things up properly and not leave za zombie lying around. And yes, "ps -ef" is executed only once, when the SPY handle is open. --Mladen GogalaOracle DBA -Original Message-From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Matthew ZitoSent: Friday, August 22, 2003 5:45 PMTo: Multiple recipients of list ORACLE-LSubject: RE: OT:UNIX: Anyway to run this in the background and return to ca Errrm - this script doesn't do what I think you're trying to do. Perl starts, it forks a child process, the parent process "does a bunch of stuff", but the child process only runs ps once. S, you end up with a zombie child process (until the parent is done with its business) and a parent process that is doing all the work. A better solution would be to reverse the ps and the "doing stuff". Let the child process do the dirty work and let the parent focus on either generating more children or status monitoring the existing children. You could use a loop that watches for the existence of a particular pid or has a set condition and add a SIGCHLD handler that will handle cleanup of the child and remove the loop condition. Thanks, Matt --Matthew ZitoGridApp SystemsEmail: [EMAIL PROTECTED]Cell: 646-220-3551Phone: 212-358-8211 x 359http://www.gridapp.com -Original Message-From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Mladen GogalaSent: Friday, August 22, 2003 2:04 PMTo: Multiple recipients of list ORACLE-LSubject: RE: OT:UNIX: Anyway to run this in the background and return to ca #!/usr/bin/perluse strict;use bytes;my $pid=0;if (!defined ($pid=fork())) { die "Problem with cutlery:$!\n"}elsif ($pid) { print "Do stuff here\n"; waitpid($pid,0); print "Cutlery is back\n"; }else { open(SPY,"ps -ef|grep sqlplus|"); while () { print;} } --Mladen GogalaOracle DBA -Original Message-From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of [EMAIL PROTECTED]Sent: Friday, August 22, 2003 1:25 PMTo: Multiple recipients of list ORACLE-LSubject: RE:OT:UNIX: Anyway to run this in the background and return to ca $ORACLE_HOME/bin/sqlplus "/ as sysdba" << EOD select .. exit EOD echo "this is a test" ps -ef|grep sqlplus I wish to put that into a unix command but at the same time run it in the background and return back to the parent script to do some other stuff? Anyone done this? Note: This message is for the named person's use only. It may contain confidential, proprietary or legally privileged information. No confidentiality or privilege is waived or lost by any mistransmission. If you receive this message in error, please immediately delete it and all copies of it from your system, destroy any hard copies of it and notify the sender. You must not, directly or indirectly, use, disclose, distribute, print, or copy any part of this message if you are not the intended recipient. Wang Trading LLC and any of its subsidiaries each reserve the right to monitor all e-mail communications through its networks. Any views expressed in this message are those of the individual sender, except where the message states otherwise and the sender is authorized to state them to be the views of any such entity. Note: This message is for the named person's use only. It may contain confidential, proprietary or legally privileged information. No confidentiality or privilege is waived or lost by any mistransmission. If you receive this message in error, please immediately delete it and all copies of it from your system, destroy any hard copies of it and notify the sender. You must not, directly or indirectly, use, disclose, distribute, print, or copy any part of this message if you are not the intended recipient. Wang Trading LLC and any of its subsidiaries each reserve the right to monitor all e-mail communications through its networks. Any views expressed in this message are those of the individual sender, except where the message states otherwise and the sender is authorized to state them to be the views of any such entity.
RE: OT:UNIX: Anyway to run this in the background and return to ca
Title: Message Oh, I see - okay, I just misunderstood what was being demonstrated. You can't simply call exit at the end of a child execution, however - you must either terminate the parent process or call wait(), waitpid(), etc. exit() will leave a zombie until the parent waits() for a cleanup. The easiest way to do that is to add a SIGCHLD handler that calls wait when the signal is raised. Thanks, Matt --Matthew ZitoGridApp SystemsEmail: [EMAIL PROTECTED]Cell: 646-220-3551Phone: 212-358-8211 x 359http://www.gridapp.com -Original Message-From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Mladen GogalaSent: Friday, August 22, 2003 6:14 PMTo: Multiple recipients of list ORACLE-LSubject: RE: OT:UNIX: Anyway to run this in the background and return to ca No, I just wanted to demonstrate the fork mechanism in perl. The proper way to handle stuff would be to call exit at the end of the child process, which would clean things up properly and not leave za zombie lying around. And yes, "ps -ef" is executed only once, when the SPY handle is open. --Mladen GogalaOracle DBA -Original Message-From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Matthew ZitoSent: Friday, August 22, 2003 5:45 PMTo: Multiple recipients of list ORACLE-LSubject: RE: OT:UNIX: Anyway to run this in the background and return to ca Errrm - this script doesn't do what I think you're trying to do. Perl starts, it forks a child process, the parent process "does a bunch of stuff", but the child process only runs ps once. S, you end up with a zombie child process (until the parent is done with its business) and a parent process that is doing all the work. A better solution would be to reverse the ps and the "doing stuff". Let the child process do the dirty work and let the parent focus on either generating more children or status monitoring the existing children. You could use a loop that watches for the existence of a particular pid or has a set condition and add a SIGCHLD handler that will handle cleanup of the child and remove the loop condition. Thanks, Matt --Matthew ZitoGridApp SystemsEmail: [EMAIL PROTECTED]Cell: 646-220-3551Phone: 212-358-8211 x 359http://www.gridapp.com -Original Message-From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Mladen GogalaSent: Friday, August 22, 2003 2:04 PMTo: Multiple recipients of list ORACLE-LSubject: RE: OT:UNIX: Anyway to run this in the background and return to ca #!/usr/bin/perluse strict;use bytes;my $pid=0;if (!defined ($pid=fork())) { die "Problem with cutlery:$!\n"}elsif ($pid) { print "Do stuff here\n"; waitpid($pid,0); print "Cutlery is back\n"; }else { open(SPY,"ps -ef|grep sqlplus|"); while () { print;} } --Mladen GogalaOracle DBA -Original Message-From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of [EMAIL PROTECTED]Sent: Friday, August 22, 2003 1:25 PMTo: Multiple recipients of list ORACLE-LSubject: RE:OT:UNIX: Anyway to run this in the background and return to ca $ORACLE_HOME/bin/sqlplus "/ as sysdba" << EOD select .. exit EOD echo "this is a test" ps -ef|grep sqlplus I wish to put that into a unix command but at the same time run it in the background and return back to the parent script to do some other stuff? Anyone done this? Note: This message is for the named person's use only. It may contain confidential, proprietary or legally privileged information. No confidentiality or privilege is waived or lost by any mistransmission. If you receive this message in error, please immediately delete it and all copies of it from your system, destroy any hard copies of it and notify the sender. You must not, directly or indirectly, use, disclose, distribute, print, or copy any part of this message if you are not the intended recipient. Wang Trading LLC and any of its subsidiaries each reserve the right to monitor all e-mail communications through its networks. Any views expressed in this message are those of the individual sender, except where the message states otherwise and the sender is authorized to state them to be the views of any such entity. Note: This message is for the named person's use only. It may
RE: OT:UNIX: Anyway to run this in the background and return to ca
Here's a rather standard way of doing a fork in Perl. Also a nice little daemon. Works very well for Oracle utilities. Jared > package Daemon; > use strict; > use Carp; > use POSIX; > sub daemon { > my($tries, $pid, $sess_id); > { > if ($pid = fork) { exit 0 } # exit parent > if (defined($pid )) { close STDOUT; > close STDIN; > chdir('/'); > croak "Cannot detach from controlling terminal" unless $sess_id = POSIX::setsid(); > return $pid; > } > if (++$tries>5 ) { > die "fork failed after $tries attempts: $!\n" > } else { > sleep 3; > redo; > } > } >} "Matthew Zito" <[EMAIL PROTECTED]> Sent by: [EMAIL PROTECTED] 08/22/2003 02:44 PM Please respond to ORACLE-L To: Multiple recipients of list ORACLE-L <[EMAIL PROTECTED]> cc: Subject: RE: OT:UNIX: Anyway to run this in the background and return to ca Errrm - this script doesn't do what I think you're trying to do. Perl starts, it forks a child process, the parent process "does a bunch of stuff", but the child process only runs ps once. S, you end up with a zombie child process (until the parent is done with its business) and a parent process that is doing all the work. A better solution would be to reverse the ps and the "doing stuff". Let the child process do the dirty work and let the parent focus on either generating more children or status monitoring the existing children. You could use a loop that watches for the existence of a particular pid or has a set condition and add a SIGCHLD handler that will handle cleanup of the child and remove the loop condition. Thanks, Matt -- Matthew Zito GridApp Systems Email: [EMAIL PROTECTED] Cell: 646-220-3551 Phone: 212-358-8211 x 359 http://www.gridapp.com -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Mladen Gogala Sent: Friday, August 22, 2003 2:04 PM To: Multiple recipients of list ORACLE-L Subject: RE: OT:UNIX: Anyway to run this in the background and return to ca #!/usr/bin/perl use strict; use bytes; my $pid=0; if (!defined ($pid=fork())) { die "Problem with cutlery:$!\n"} elsif ($pid) { print "Do stuff here\n"; waitpid($pid,0); print "Cutlery is back\n"; } else { open(SPY,"ps -ef|grep sqlplus|"); while () { print;} } -- Mladen Gogala Oracle DBA -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of [EMAIL PROTECTED] Sent: Friday, August 22, 2003 1:25 PM To: Multiple recipients of list ORACLE-L Subject: RE:OT:UNIX: Anyway to run this in the background and return to ca $ORACLE_HOME/bin/sqlplus "/ as sysdba" << EOD select .. exit EOD echo "this is a test" ps -ef|grep sqlplus I wish to put that into a unix command but at the same time run it in the background and return back to the parent script to do some other stuff? Anyone done this? Note: This message is for the named person's use only. It may contain confidential, proprietary or legally privileged information. No confidentiality or privilege is waived or lost by any mistransmission. If you receive this message in error, please immediately delete it and all copies of it from your system, destroy any hard copies of it and notify the sender. You must not, directly or indirectly, use, disclose, distribute, print, or copy any part of this message if you are not the intended recipient. Wang Trading LLC and any of its subsidiaries each reserve the right to monitor all e-mail communications through its networks. Any views expressed in this message are those of the individual sender, except where the message states otherwise and the sender is authorized to state them to be the views of any such entity.