Hi there!

I am a student studying computer science.

시스템 프로그래밍

시스템 프로그래밍 5장 - Process Control : PID

만능성구 2020. 5. 5. 17:38
728x90

프로세스 관련 정보세팅 및 관리 제어하는 방법 apip

Process ID

 

#include <sys/types.h>
#include <unistd.h>

pid_t getpid(void); // return PID of caller process
pid_t getpgrp(void); // return Process GID of caller
각 process의 id를 얻어오는 system call
return PID of caller process
각 process의 group id를 얻어오는 system call
return Process GID of caller

Session

- Process group들의 모임

- group은 작업 / Sesseion은 작업 공간

z.B) Terminal에서 shell이 실행이되고 shell에서 process가 실행되면 shell안의 여러개의 process들이 한 Session이 된다.

 

gourp leder가 있고 group leder의 id를 group id라 한다.

= Session leder, Session id

#include <sys/types.h>
#include <unistd.h>

pid_t getppid(void); // return PID of caller’s parent
현재 process의 부모 process의 id를 얻어오는 system call
// return PID of caller’s parent
#include <sys/types.h>
#include <unistd.h>

pid_t getpgid(pid_t tpid);
특정 process의 group id를 얻어오는 system call
tpid : 특정 procces의 id
return 특정 group id / -1

Process Group Leader

- group id가 group의 leader다

- remorte machine에 logon해서 하나의 terminal을 할당 받으면 shell이 작업공간 생성하고 shell이 group에 sesson leader가 된다.

- Sesseion leader는 작업 group을 묶는다. 그래서 안에 포함된 group에게 특별한 signal을 보낼 수 있는 권한을 가진다.

- Session leader가 종료될 때 session안의 포함된 모든 process에게  SIGHUP이란 signal을 전달 다른 process들도 종료가 된다.

-machine에서 logout하더라도 chlid process가 계속 실행되도록 만드려면 nohup command를 이용해서 SIGHUP signal을 받지 않을 수 있다.

 

$ nohup command ... &


#include <sys/types.h>
#include <unistd.h>

int setpgid(pid_t pid, pid_t pgid);

 

자신의 process가 포함된 group id, leader의 id를 setting

pid : 교차 process id

pgid : 교차 process group id

return 0 / -1
pid pgid  
0 0 이것을 실행한 process가 해당 group이 된다.
0 x 현재 불러준 process의 group id를 x로 설정
x 0 불러준 process의 group id를 이 x로 설정
x x  pid x의 process가 pid가 속한 그룹의 leader가 되게 만들어 준다.
x y x의 group id를 y로 설정
728x90