Difference between revisions of "Daemon linux"
From Teknologisk videncenter
m (→Checking the daemon) |
m (→Checking the daemon) |
||
Line 34: | Line 34: | ||
772175 1 772175 772175 my_daemon | 772175 1 772175 772175 my_daemon | ||
</source> | </source> | ||
+ | {{Category:Linux]] |
Revision as of 07:48, 16 December 2022
Example of creating a daemon in Linux:
- setsid() - damon will be the session leader. Sets Session ID (SID) and Group ID (GID) to Process ID (PID)
- Reopening stdin, stdout and stderr to /dev/null detaches the process from the controlling terminal and Parent PID is set to 1 (init or systemd - depending on Linux version/distribution)
- log_err() and log_to_log() are calls to a logging system not shown here
1 void daemon_create(void) {
2 pid_t pid;
3
4 pid = fork();
5 if(pid < 0){
6 log_err("Error in fork: %m"); // Write error to terminal
7 exit(1);
8 }
9 if(pid > 0){
10 exit(0); // Parent die
11 }
12 if(setsid() < 0){ // Make child session leader
13 log_err("Error in setsid: %m");
14 exit(1);
15 }
16 if ( freopen("/dev/null", "r", stdin) == NULL
17 || freopen("/dev/null", "w", stdout) == NULL
18 || freopen("/dev/null", "w", stderr) == NULL ) {
19 log_err("When creating daemon freopen from STDIN/OUT/ERR failed: %m");
20 }
21 log_to_syslog(); // Log to syslog only when in daemon mode
22 }
Checking the daemon
$ ps xo pid,ppid,pgid,sid,comm | grep -P '(my_daemon|PPID)'
PID PPID PGID SID COMMAND
772175 1 772175 772175 my_daemon
{{Category:Linux]]