cs162b: daemonization jacob t.chan. foreground process has input/output capabilities these require...
TRANSCRIPT
![Page 1: CS162B: Daemonization Jacob T.Chan. Foreground Process Has input/output capabilities These require users at the terminal Lives as long as the terminal](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d005503460f949d2f32/html5/thumbnails/1.jpg)
CS162B: DaemonizationJacob T.Chan
![Page 2: CS162B: Daemonization Jacob T.Chan. Foreground Process Has input/output capabilities These require users at the terminal Lives as long as the terminal](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d005503460f949d2f32/html5/thumbnails/2.jpg)
Foreground Process
Has input/output capabilities These require users at the terminal
Lives as long as the terminal that started it
Associated with the caller (user or process executing it) or a controlling terminal
![Page 3: CS162B: Daemonization Jacob T.Chan. Foreground Process Has input/output capabilities These require users at the terminal Lives as long as the terminal](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d005503460f949d2f32/html5/thumbnails/3.jpg)
Background Process
Runs by itself Responding to events aside from I/O Example: SSH (Secure Shell) connection requests
Spawned by system upon boot up
Has same access privileges as root
Usually handles hardare
Can be associated with caller, but not under direct control Lack of controlling terminal Termination of parent process
![Page 4: CS162B: Daemonization Jacob T.Chan. Foreground Process Has input/output capabilities These require users at the terminal Lives as long as the terminal](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d005503460f949d2f32/html5/thumbnails/4.jpg)
Daemons
Background process in Unix
These do not die usually or will require restarting
They spawn other processes to handle further events Example: upon receiving connection request, server daemon will spawn another
process to establish a MORE SPECIFIC connection
They write to a certain system log file (found in /var/log) instead of console Reason: they lack controlling terminals
![Page 5: CS162B: Daemonization Jacob T.Chan. Foreground Process Has input/output capabilities These require users at the terminal Lives as long as the terminal](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d005503460f949d2f32/html5/thumbnails/5.jpg)
Daemons
#include <unistd.h>
#include <sys/stat.h>
if(fork() != 0)
exit(0);
// only the child process gets this far – daemonize now!
setsid(); // make this process a leader of its own session
chdir("/"); // prevents process from hogging a directory
// the chdir call prevents "directory in use" issue
![Page 6: CS162B: Daemonization Jacob T.Chan. Foreground Process Has input/output capabilities These require users at the terminal Lives as long as the terminal](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d005503460f949d2f32/html5/thumbnails/6.jpg)
Daemons
// files created must have rwx permissions for the owner of this process (usually root)and rx permissions for the group
umask(027); //remember this?
// close stdin, stdout, stderr (where applicable)
close(0); // stdin
close(1); // stdout
close(2); // stderr
![Page 7: CS162B: Daemonization Jacob T.Chan. Foreground Process Has input/output capabilities These require users at the terminal Lives as long as the terminal](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d005503460f949d2f32/html5/thumbnails/7.jpg)
Printing out System Logs
#include <syslog.h>
openlog("Daemon Log Test", LOG_PID | LOG_CONS, LOG_USER);
Configure system log so that:1) Whenever this process writes to it, the string "Daemon Log Test" is appended at
the beginning.2) The process ID is logged with every message (LOG_PID) and the messages will be
written to the console if the system log is unavailable (LOG_CONS).3) Messages are assumed to be generated from an arbitrary process (LOG_USER).
![Page 8: CS162B: Daemonization Jacob T.Chan. Foreground Process Has input/output capabilities These require users at the terminal Lives as long as the terminal](https://reader030.vdocument.in/reader030/viewer/2022032703/56649d005503460f949d2f32/html5/thumbnails/8.jpg)
Printing out System Logs
generate a system log message "AIEEEEE" that will be marked as an error message generated by an arbitrary process
syslog(LOG_ERR | LOG_USER, "AIEEEEE"); syslog acts like printf! remember: it (usually) writes to /var/log
int i = 5 + 5;
syslog(LOG_ERR | LOG_USER, "5+5=%d", i);
closelog();
close file descriptors that were opened to gain access to the system logs by both openlog and syslog (in short, so that it is accessible)