PID Functions
Process IDs
#include <sys/types.h>
#include <unistd.h>
pid_t getpid(void);
pid_t getpgrp(void);
- 호출한 process의 PID/GID를 return한다.
- process GID : session leader의 PID = shell의 PID
- 자신이 속한 group ID = 현재 생성된 process를 만든 group
- session : process group의 모임
- ex) shell이 실행되고 shell에서 process가 실행되면 shell 내부의 process들이 한 session이 된다.
Parent Process ID
#include <sys/types.h>
#include <unistd.h>
pid_t getppid(void);
pid_t getpgid(pid_t tpid);
- 호출한 parent/group의 parent PID를 return한다.
- tpid : 요청한 process의 ID
Process Group Leader
- Session leader의 PID가 pgid이다. = group의 leader
- child도 모두 이 group에 속하게 된다.
- signal이 session leader에게 전달되면 group 모두 동일하게 적용한다.
- 만일 session leader가 종료하면 "SIGHUP" signal이 전달되고, group내의 모든 process가 종료된다.
- session이 종료되도 계속 진행하고 싶다면 background mode로 진행하면 된다. 단, std I/O가 아닌 file I/O를 사용해야한다. "nohup" command를 이용하면 된다.
Setting PGID
#include <sys/types.h>
#include <unistd.h>
int setpgid(pid_t pid, pid_t pgid);

- pid : Process ID
- pgid : Process group ID
- return : 성공 시 0 / 실패 시 -1
Exit Handler
atexit()
#include <stdlib.h>
int atexit(void (*func)(void));
- exit()이 호출되었을 때 func를 실행하는 함수
- 여러번 호출하게 되면 stack처럼 진행한다. → LIFO 방식
- ex) f1, f2가 순서대로 호출되었다면 실행 순서는 f2, f1이다.
System()
#include <stdlib.h>
int system(const char *string);
- string으로 shell command를 실행하는 함수
- string : shell command(ex. ls -al / ps / kill -9 ...)
Race Condition
- process 사이에 data를 공유해서 각 process의 실행 순서에 따라 결과 값이 계속 달라지는 현상
- ex) fork() 이후 parent가 먼저일지 child가 먼저일지 모른다.
sleep()
#include <unistd.h>
#include <time.h> // nanosleep 사용 시 include
int sleep(unsigned int seconds);
int usleep(useconds_t usec);
int nanosleep(const struct timespec *req, struct timespec *rem);
- seconds만큼 대기(block)하는 함수
- return : 정상 종료 시 0 / interrupt 시 lefttime
- left time : signal에 의해 interrupt 되고 wake한 기분
Process time
#include <sys/times.h>
clock_t times(struct tms *buf);
Returns:
struct tms(
clock_t tms_utime; /* user cputime */
clock_t tms_stime; /* system cputime */
clock_t tms_cutime; /* child user cputime */
clock_t tms_cstime; /* child system cputime */
}
- process의 수행시간을 clock_t 단위로 계산한다.
- clock cycle time(주기/길이) * clock_t = time
- wall clock time(경과 시간) : program이 실행한 뒤부터 종료할 때까지 모든 시간을 합친 것