in reply to Re: How do I run a script in the background? How should I run a script as daemon?
in thread How do I run a script in the background? How should I run a script as daemon?

If you disassociate the process from its parent (via setsid), this won't happen. When you kill your terminal (or exit it any way other than by typing "exit" or "logout"), a HUP signal is sent to the terminal's process group. This means every process that currently is in the shell's process group receives the HUP signal, which effectively kills everything started during that shell session.

The approved way of disassociating a process from its process group is by changing its process group ID (pgid), such as via setsid. See perlipc and my other comment at Re: Is it possible to background a perl script from within itself? for a method to cleanly do this.

  • Comment on Re: Answer: How do I run a script in the background? How should I run a script as daemon?

Replies are listed 'Best First'.
Re: Re: Answer: How do I run a script in the background? How should I run a script as daemon?
by AgentM (Curate) on Nov 17, 2000 at 01:05 UTC
    Why yes, you're right, but our friend, the late W. Richard Stevens goes farther and explains that the best method is as following:
    #untested code conversion from C sources exit if fork()!=0; setsid(); $SIG{'HUP'}='IGNORE'; exit if fork()!=0; chdir('/'); #prevents path-specific hax umask(0); #clear file mode creation mask openlog(...); #standard syslog call
    With the second call to fork, we are guaranteed that the child is not a session leader and therefore cannot acquire a controlling terminal. We ignore SIGHUP since the session leader is soon to be terminated. Just an expansion on what you said. I certainly admire and trust the late Mr. Stevens very much!
    AgentM Systems nor Nasca Enterprises nor Bone::Easy nor Macperl is responsible for the comments made by AgentM. Remember, you can build any logical system with NOR.