You could use
system("cmd &")
or you could use fork as documented in fork, with further examples in the perlipc manpage. Some things to be aware of, if you're on a Unix-like system:
- STDIN, STDOUT and STDERR are shared
-
Both the main process and the backgrounded one (the ``child'' process) share the same
STDIN,
STDOUT and
STDERR filehandles. If both try to access them at once, strange things can happen. You may want to close or reopen these for the child. You can get around this with
opening a pipe (see open) but on some systems this means that the child process cannot outlive the
parent.
- Signals
-
You'll have to catch the
SIGCHLD signal, and possibly
SIGPIPE too.
SIGCHLD is sent when the backgrounded process finishes.
SIGPIPE is sent when you write to a filehandle whose child process has closed (an untrapped
SIGPIPE can cause your program to silently die). This is not an issue with
system.
- Zombies
-
You have to be prepared to ``reap'' the child process when it finishes
$SIG{CHLD} = sub { wait };
See Signals for other examples of code to do this. Zombies are not an issue with system.