目錄表

Process Relationship

0x00 Outline


0x01 Logins

Boot Process

BSD Terminal Logins

execle("/bin/login", "login", "-p", username, (char *)0, envp);
execl("/bin/sh", "-sh", (char *)0);

BSD Network Logins


0x02 Process Groups

process group

#include <unistd.h>
 
pid_t getpgrp(void);
/* Returns: process group ID of calling process */
 
pid_t getpgid(pid_t pid);
/* Returns: process group ID if OK, −1 on error */

process group lifetime

create or join a process group

#include <unistd.h>
 
int setpgid(pid_t pid, pid_t pgid);
/* Returns: 0 if OK, −1 on error */

0x03 Sessions

Session

proc1 | proc2 &
proc3 | proc4 | proc5

create a session

#include <unistd.h>
 
pid_t setsid(void);
/* Returns: process group ID if OK, −1 on error */

get the current session id

#include <unistd.h>
 
pid_t getsid(pid_t pid);
/* Returns: session leader’s process group ID if OK, −1 on error */

0x04 Controlling Terminal

controlling terminal

tcgetpgrp, tcsetpgrp and tcgetsid function

#include <unistd.h>
 
pid_t tcgetpgrp(int fd);
/* Returns: process group ID of foreground process group if OK, −1 on error */
 
int tcsetpgrp(int fd, pid_t pgrpid);
/* Returns: 0 if OK, −1 on error */
#include <termios.h>
 
pid_t tcgetsid(int fd);
/* Returns: session leader’s process group ID if OK, −1 on error */

0x05 Job Control

job control


0x06 Shell Execution of Program

$ ps -o pid,ppid,pgid,sid,comm | cat1 | cat2
 
 PID   PPID   PGID  SID  COMMAND
 949   947    949   949  sh
 1988  949    949   949  cat2
 1989  1988   949   949  ps
 1990  1988   949   949  cat1

0x07 Orphaned Process Group

orphaned process group


0x08 FreeBSD Implementation


0x09 參考資料

Shichao's notes apue ch9