1. fork()를 호출했을 때 각 process의 데이터는 따로 나뉘어 저장되기 때문에 global variable인 int x도 마찬가지로 서로 영향을 주지 않습니다.
#include <stdio.h>
// #include <sys/types.h>
#include <unistd.h>
void fork1(){
int x = 1;
pid_t pid = fork();
if( pid == 0 ){
printf("Child has x = %d\n", ++x);
}
else{
printf("Parent has x = %d\n", --x);
}
printf("Bye from process %d with x = %d\n", getpid(), x);
}
int main()
{
fork1();
return 0;
}
출력 결과:
1. fork() 함수는 child process면 0을, parent process면 0보다 큰 값을 반환합니다.
그러나 이 말은 child process의 ID가 0이 된다는 뜻이 아닙니다.
실제로 위 예시에서 child process 안에서 getpid() 함수를 호출하여 출력했을 때 11203이 나오는 것에서 알 수 있습니다.
그럼 fork() 함수가 리턴하는 값은 어떤 의미를 가지는 걸까요?
fork() 함수의 리턴값이 곧 process의 ID가 되는 건 아니지만, 이 리턴 값을 통해 현재 process가 parent process인지 child process인지를 구별할 수 있습니다.
2. getpid() 함수는 현재 process의 ID를 리턴합니다.
보통 fork()를 통해 child process를 생성하면, child process의 ID는 parent process의 ID + 1 값이 됩니다.
위에서 parent process의 ID는 11202이고 child process의 ID는 11203이 출력되는 것도 그 이유 때문입니다.
'2023년 이전 > 리눅스' 카테고리의 다른 글
ln 명령어로 심볼릭 링크 symbolic link 생성하기 (0) | 2022.10.19 |
---|---|
ForkLift로 로컬-원격 서버(또는 원격 서버-서버) 간 파일 쉽게 전송하기 (0) | 2022.10.13 |
SSH로 원격 서버 접속 + VS Code로 SSH config 설정하기 (0) | 2022.10.13 |
포트 포워딩하기 (0) | 2022.07.18 |
SCP를 이용하여 로컬과 원격 서버(UTM, AWS, 네이버 클라우드 등) 사이 파일 전송하기 (0) | 2022.06.05 |