Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does adding '&' makes it run as a daemon?

Tags:

linux

celery

I am aware that adding a '&' in the end makes it run as a background but does it also mean that it runs as a daemon?

Like:

celery -A project worker -l info &

celery -A project worker -l info --detach

I am sure that the first one runs in a background however the second as stated in the document runs in the background as a daemon.

I would love to know the main difference of the commands above

like image 994
Dean Christian Armada Avatar asked Sep 10 '26 04:09

Dean Christian Armada


2 Answers

Yes the process will be ran as a daemon, or background process; they both do the same thing.

You can verify this by looking at the opt parser in the source code (if you really want to verify this):

. cmdoption:: --detach
    Detach and run in the background as a daemon.

https://github.com/celery/celery/blob/d59518f5fb68957b2d179aa572af6f58cd02de40/celery/bin/beat.py#L12

https://github.com/celery/celery/blob/d59518f5fb68957b2d179aa572af6f58cd02de40/celery/platforms.py#L365

Ultimately, the code below is what detaches it in the DaemonContext. Notice the fork and exit calls:

def _detach(self):
    if os.fork() == 0:      # first child
        os.setsid()         # create new session
        if os.fork() > 0:   # pragma: no cover
            # second child
            os._exit(0)
    else:
        os._exit(0)
    return self
like image 133
Rafael Avatar answered Sep 13 '26 01:09

Rafael


They are different!

"&" version is background , but not run as daemon, daemon process will detach with terminal. in C language ,daemon can write in code :

fork()
setsid()
close(0) /* and /dev/null as fd 0, 1 and 2 */
close(1)
close(2)
fork()

This ensures that the process is no longer in the same process group as the terminal and thus won't be killed together with it. The IO redirection is to make output not appear on the terminal.(see:https://unix.stackexchange.com/questions/56495/whats-the-difference-between-running-a-program-as-a-daemon-and-forking-it-into)

a daemon make it to be in its own session, not be attached to a terminal, not have any file descriptor inherited from the parent open to anything, not have a parent caring for you (other than init) have the current directory in / so as not to prevent a umount... while "&" version do not

like image 31
peter__barnes Avatar answered Sep 13 '26 01:09

peter__barnes



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!