Fork: Difference between revisions

From Rosetta Code
Content added Content deleted
No edit summary
m (→‎[[Python]]: Fixed gap in code block)
Line 40: Line 40:
'''Interpreter:''' [[Python]] 2.5
'''Interpreter:''' [[Python]] 2.5
import os
import os

pid = os.fork()
pid = os.fork()
if pid > 0:
if pid > 0:

Revision as of 13:39, 19 February 2007

Task
Fork
You are encouraged to solve this task according to the task description, using any language you may know.

In this task, the goal is to spawn a new process which can run simultaneously with, and independently of, the original parent process.


Perl

Interpreter: Perl 5.x

In the child code, you may have to re-open database handles and such.

FORK:
if ($pid = fork()) {
    # parent code
} elsif (defined($pid)) {
    setsid; # tells apache to let go of this process and let it run solo
    # disconnect ourselves from input, output, and errors
    close(STDOUT);
    close(STDIN);
    close(STDERR);    
    # re-open to /dev/null to prevent irrelevant warn messages.
    open(STDOUT, '>/dev/null');
    open(STDIN, '>/dev/null');
    open(STDERR, '>>/home/virtual/logs/err.log');
    
    # child code
    
    exit; # important to exit
} elsif($! =~ /emporar/){
    warn '[' . localtime() . "] Failed to Fork - Will try again in 10 seconds.\n";
    sleep(10);
    goto FORK;
} else {
    warn '[' . localtime() . "] Unable to fork - $!";
    exit(0);
}

Python

Interpreter: Python 2.5

import os

pid = os.fork()
if pid > 0:
 # parent code
else:
 # child code