일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- 턱걸이
- 영상처리
- TensorFlow
- C++
- 백준
- OpenCV
- 시스템프로그래밍
- error
- python
- 회귀
- linux
- c
- 프로그래밍
- 백준알고리즘
- 코딩
- 알고리즘
- 운영체제
- 공부
- 딥러닝
- 학습
- CV
- 리눅스
- 쉘
- shell
- Computer Vision
- Windows 10
- 텐서플로우
- 프로세스
- Windows10
- C언어
- Today
- Total
줘이리의 인생적기
프로세스 ID, 프로세스 생성 본문
프로세스 ID
- 각 프로세스는 각 pid를 가지며, 최대값은 32768이다.
- sudo vi /proc/sys/kernel/pid_max 에서 최대값을 확인할 수 있음.
프로세스 계층
- 최초 프로세스는 init 프로세스 이며 pid는 1이다.
- 운영체제가 init프로세스를 생성한다.
- 다른 프로세스는 init프로세스를 기반으로 생성된다.
- ppid는 부모프로세스의 pid를 뜻한다.
소유자 관리
- 리눅스는 프로세스의 소유자와 그룹을 UID/GID 정수로 관리하며 서로 매핑되어 있다.
- sudo vi /etc/passwd 에서 확인할 수 있다.
PID 호출 함수
- getpid(), getppid()로 알 수 있다.
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
printf("pid=%d \n", getpid());
printf("ppid=%d \n", getppid());
return 0;
}
- 코드 작성 후 gcc -o 파일이름.c 실행파일이름 로 컴파일
- ./실행파일이름 으로 실행
프로세스 생성
- code, data, bss, heap, stack 공간을 생성한다.
- 프로세스 이미지 해당 공간에 업로드.
- 실행
fork() 시스템콜
- fork()를 실행하면 프로세스 공간을 만들고, 프로세스의 모든 공간의 데이터를 복사한다.
- #include <unistd.h> 헤더파일을 포함해야 한다.
- pid_t fork(void) 가 함수원형이다.
- pid = fork()가 실행되면 별도 메모리 공간에 자식 프로세스가 생성되며, 자식 프로세스는 pid가 0으로 리턴된다.
- 부모 자식 프로세스의 변수 및 PC 값이 동일하다.
exec() 시스템콜
- exec()를 실행하면 새로운 프로세스를 만드는 것이 아니라, code, data, bss 영역을 새로운 프로세스의 이미지로 덮어씌운다.
- exec() 시스템콜은 6가지가 있다.
- 제일 대표적인 시스템콜 중 하나는 execl() 시스템콜
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
execl("/bin/ls", "ls". "-l", NULL);
//정상적으로 execl이 실행된다면 아래 코드는 실행이 안됨
perror("execl is failed \n"); //에러출력
exit(1); // 에러코드 전달
}
- 첫번째 인자는 실행파일명, 두번째 인자부터는 arg인수 목록 넣으면 된다.
- execlp()는 path값을 참조하여 실행하겠다는 시스템콜이어서 첫 번째 인자에 실행파일명만 넣으면 된다.
execlp("ls", "ls", "-l", NULL);
- execle()는 path값을 따로 설정을 하여 참조해주어야 한다.
char *envp[] = {"USER=user", "PATH=/bin", (char *)0};
execle("ls", "ls", "-al", NULL, envp);
- perror() 함수가 호출된다는 것은 프로세스 이미지 덮어씌우는 작업이 실행되지 못했다는 의미이다.
'공부 > 시스템 프로그래밍' 카테고리의 다른 글
프로세스 우선순위 변경 (0) | 2021.12.20 |
---|---|
fork, exec, wait / copy-on-write / exit (0) | 2021.12.17 |
하드링크, 소프트링크, 특수 파일 (0) | 2021.12.13 |
foreground process, background process (0) | 2021.12.10 |
리다이렉션(redirection), 파이프(pipe) (0) | 2021.12.08 |