반응형

waitpid

waitpid(pid, status, options)

기본적으로는 대기하는 집합 내의 하나의 자식 프로세스가 종료할때까지 프로세스를 정지

pid>0이면 pid를 가지는 자식 1개가 대기집합, pid가 -1이면 부모의 모든 자식 프로세스가 대기집합

 

options가 WNOHANG이면 자식중 아무것도 종료되지 않았다면 즉시리턴 쉽게말해서, 종료했다면, 회수하지만, 정지하지않았다면 그냥 넘긴다는 소리인듯. 

WUNTRACED라면 대기 집합의 프로세스가 종료or 정지할때까지 프로세스를 정지 (정지도 포함 되는것) 

 

Return값은 일반적으로 회수된 PID이나, WNOHANG에서 즉시리턴 하면 0이고, error가 발생하면 -1임. 

 

wait는 waitpid의 단순버전으로, waitpid(-1,&status,0)과 같다. (부모의 모든 프로세스중 하나의 자식프로세스가 종료할때까지 프로세스를 정지) 

kill fork execve exit (핵심함수)

kill(pid_t pid, int sig) 시그널을 다른 프로세스로 보냄. return값은 일반적으로 0 error면 -1

pid가 0보다 크면 그냥 pid에 해당하는곳에 보냄.

pid가 0이면 호출 프로세스 그룹 내 모든 프로세스에 보낸다. 

pid가 0보다 작으면 |pid|가 들어가있는 프로세스 그룹 내 모든 프로세스에 보낸다. 

 

fork(void) 자식에서는 0을 return하고, 부모에서는 child의 pid를 리턴한다.

자식프로세스는 코드, 데이터, 힙등 거의 모든 것을 복사해서 가져온다.

구별하는 방법은 pid가 서로 다르다는 것이다. 

 

exit(int status) 일반적으로 status는 0을 넣고, 그냥 프로세스를 종료하는 코드이다. 

프로세스를 종료하는 signal을 받았거나, exit을 호출할때 프로세스는 영구적으로 종료된다. 

 

execve(filename, argv, envp) 실행가능 파일 filename을 실행한다. 정상적으로 작동했을경우 아무것도 반환하지않고, 애초에 이 프로세스에서는 이 아래코드가 전혀 실행되지 않는다. 오류가 나면 -1을 return한다.

 

 

그외 함수

getpid(void) 현재 프로세스 pid반환

getppid(void) 자신의 부모의 pid 반환

getpgrp(void) 현재 프로세스의 프로세스 그룹 반환

setpgid(pid, pgid) 프로세스 pid의 프로세스 그룹을 pgid로 반환한다. pid가 0 이면 현재 프로세스의 pid를 pgid가 0이면 pid를 그대로 pgid로 사용한다. 

ex) setpgid(0,0)은 현재 프로세스의 pid를 pgid로 사용한다. 

 

 

 

반응형

+ Recent posts