RE: OT:UNIX: Anyway to run this in the background and return to ca

2003-08-22 Thread Mladen Gogala
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

2003-08-22 Thread Matthew Zito
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

2003-08-22 Thread Mladen Gogala
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

2003-08-22 Thread Matthew Zito
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

2003-08-22 Thread Jared . Still

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.