앞에서 프로세스에 대해서 간단히 설명드렸는데요,
그 내용 중에 프로세스를 식별할 수 있는 번호 ! PID를 간단하게 설명했었습니다.
이번 포스팅에서는 자신과 자신의 부모의 PID를 얻어오는 방법에 대해서 알아보겠습니다.
간단합니다.
자신의 PID를 호출하는 getpid() 시스템 콜과 getppid() 시스템 콜을 사용하시면 됩니다.
#include <unistd.h> #include<sys/types.h> pid_t getpid(void); pid_t getppid(void); | ||
입력 인자 | void | 잘라낼 파일의 디스크립터 |
반환값 | pid_t | 실패의 경우는 없습니다. 해당 프로세스의 PID값을 반환 |
굉장히 단순합니다. 그럼 예제를 보시죠!
아래와 같습니다. 자신과 자신의 부모 프로세스의 PID값을 출력해주는 예제입니다.
아래는 해당 프로그램의 출력화면 인데요, 여러번 실행할 때 마다 부모의 프로세스는 유지되지만
내 프로세스 ID는 변경됨을 알 수 있습니다. 1씩 계속 증가하는 것을 볼 수 있죠.
아까 말씀드리지 않은 내용이 있는데요, 해당 프로그램이 실행되고 종료 후 다시 실행하게 되면
아까의 프로세스라고 인식하지 않습니다. 새로운 프로세스라고 운영체제는 인식하는 것이죠,
이때 PID값은 전의 값이 아닌 최종적으로 사용한 값 다음의 비어있는 PID값을 할당하게 됩니다.
이렇게 계속 할당하면 MAX값 아까 32768의 값을 넘어서겠죠? 그럼 다시 앞에서부터 비어있는
PID 값들을 새로 할당해주게 됩니다.^^
여기서 함정이 있는데요! getpid()함수가 정말 프로세스 PID를 얻어오는 걸까요...?
그럼 아까 말한 스레드는 뭘까요..? getpid()함수의 원형을 한번 확인해 보시면 알 수 있습니다.!
이건 다음에 다시 알려드릴게요 ^^
'Linux > System Programming' 카테고리의 다른 글
리눅스 시스템 에러 - errno (0) | 2015.08.13 |
---|---|
[프로세스 관리] 2. 새로운 프로세스 실행 (0) | 2015.04.14 |
[프로세스 관리] 0. 프로그램 / 프로세스 / 스레드 (0) | 2015.04.12 |
[파일입출력] 6. 파일 안의 데이터 잘라내기 (0) | 2015.02.12 |
[파일입출력] 5. lseek()으로 파일 탐색하기 (0) | 2015.02.10 |