프로세스 포크 분석;l
, :#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
pid_t pid1;
pid_t pid2;
pid1= fork();
pid2= fork();
printf("pid1:%d, pid2:%d/n", pid1, pid2);
}
:
이 프로그램에서 이 프로그램으로 실행되는 모든 프로세스가 끝날 때까지 다른 프로세스가 실행되지 않았습니다.
1. 이 프로그램을 실행한 후에 모두 몇 개의 프로세스를 실행할 것인지 말해 주세요.
2. 만약에 한 프로세스의 출력 결과가'pid1:1001, pid2:1002'이면 다른 프로세스의 출력 결과를 작성한다(프로세스의 실행 순서를 고려하지 않는다).
이 제목의 유일한 차이점은 이 프로그램이 두 번 연속 포크를 했다는 것이다. 그러면 결과는 어떻게 될까?
이 문제를 해결할 때 주의해야 할 점은 하나의 프로세스가 포크된 후에 메인 프로세스와 하위 프로세스가 계속 아래로 실행된다는 것이다. (만약 메인 프로세스나 하위 프로세스가 중도에 종료되지 않는다면) 따라서 위의 코드는 아래의 코드로 바꿀 수 있다.
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
pid_t pid1;
pid_t pid2;
pid1= fork();
if(pid1 == 0) // son
{
pid2= fork();
if(pid2 = = 0) //son of son
{
}
}
pid2= fork();
if(pid2 == 0) //the second son of root
{
}
else //is the root
}
//만약 프로그램이 주석대로 실행된다면, 하위 프로세스가 만들어진 후에 부모 프로세스가 먼저 실행된다는 조건이 있다
//
//
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.