Process
- process := 프로그램 코드, 변수 값, 스택 등에 저장된 값, PCB 내용 등을 포함
- Process vs. Program
- process의 계층 구조: parent process → child processes
- UNIX system의 모든 process는 init의 descendent process
프로세스 목록 보기
- shell 상에서 프로세스 목록 확인
- $ps
- 실행 중인 프로세스 종료 시키기
- $kill -9 프로세스 번호
Process Identifier
- process identifier : 음이 아닌 정수
- 0 : swapper
- 1 : init
- getpid(), getppid() 시스템 호출
#include<unistd.h>
pid_t getpid(void);
pid_t getppid(void); //parent process id
Process Group
- process group :
- 프로세스들을 묶어서 하나의 group으로 만든다.
- 같은 group에 속한 process들에게 동시에 signal을 보낼 수 있다.
- 초기에 fork나 exec에 의해 group id 계승
- group leader :
- 자신의 pid가 group id 이면, group의 leader 이다.
- group id 검색 시스템 호출 :
- 사용법 :
#include <sys/types.h>
#include <unistd.h>
pid_t getpgrp(void);
pid_t getpgid(pid_t pid);
→ getpgid의 인자가 0이면 호출 프로세스 자신의 group id 검색
int main(void) {
printf("%ld : %ld\n", getpid(), getppid());
printf("%ld vs. %d\n", getgrp(), getpgid());
return 0;
}
- process group의 변경 :
- 사용법 :
#include <sys/types.h>
#include <unistd.h>
int setpgid(pid_t pid, pid_t pgid);
- pid 인 프로세스의 group id를 pgid로 설정
int main(void) {
pid_t pid;
printf("%ld : %ld\n", getpid(), getppid());
printf("%ld vs. %d\n", getgrp(), getpgid());
pid = fork(); //child process를 만들어내는 명령
if (pid == 0) { //fork의 반환값이 0이면 child
printf("child before ... %ld : %ld\n", getpid(), getppid());
printf("child before ... %ld vs. %ld\n", getpgrp(), getpgid(0));
setpgid(getpid(), getpid());
printf("child after ... %ld : %ld\n", getpid(), getppid());
printf("child after ... %ld vs. %ld\n", getpgrp(), getpgid(0));
return 0;
}
wait(0); //child가 종료할때까지 기다리기
return 0;
}
Session
- session :
- 한 session은 한 단말기를 사용하는 foreground process group과 background process group의 집합체이다.
- 각 process group은 하나의 session에 속한다.
- getsid 시스템 호출 : session id를 획득
#include <sys/types.h>
#include <unistd.h>
pid_t getsid(pid_t pid);
- setsid() 시스템 호출 :
#include <sys/types.h>
#include <unistd.h>
pid_t setsid(void);
- 제어 단말기를 갖지 않는 새로운 session과 group 생성
- 호출 프로세스의 id가 session과 group의 id가 된다.
- 만약, 호출 process가 현재 group의 leader 이면 –1을 return
int main(void) {
printf("pid = %ld\n", getpid());
printf("parent pid = %ld\n", getppid());
printf("group id = %ld\n", getpgrp());
printf("session id = %ld\n", getsid(getppid()));
return 0;
}
main() 함수 인자 사용
int main(int argc, char **argv){
int i;
printf("%d\n", argc);
i=0;
while(argv[i]!=NULL){
printf("%s\n", argv[i]);
i++;
}
return 0;
}
//argc : 문자열 개수
//argv : main 함수에 들어온 문자열을 단어 단위로 자른 것
'전공 > 유닉스' 카테고리의 다른 글
6장. 프로세스 생성과 실행 (1) | 2023.11.01 |
---|---|
4장. 시스템 정보 (0) | 2023.11.01 |
3장. 파일과 디렉토리 (1) | 2023.11.01 |
2장. 파일 입출력 (2) (1) | 2023.10.23 |
2장. 파일 입출력 (1) (1) | 2023.10.05 |
댓글