하위 프로세스가 실행될 때

하위 프로세스가 실행될 때

항상 상위 프로세스가 완료된 후에 하위 프로세스가 실행된다고 생각했는데, 다음 프로그램을 실행하고 나면 가끔 상위 프로세스, 하위 프로세스, 대체 프로세스만 출력되는 결과가 나오는데, 그게 바로 스케줄러인 것 같아요. 프로세스를 변경했지만 작업에서 둘 다 S 상태인데도 관리자가 계속 인쇄하므로 하위 프로세스와 상위 프로세스가 실행될 때 감사합니다!

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main (){
    int pid=fork();
    while (1){
        if(pid==0){
            puts("child");
        }else{
            puts("parent");
        }
    }
}

답변1

이후에는 fork()상위 프로세스와 하위 프로세스가 이론적으로 동시에 실행되기 시작합니다. 물론 실제로는 단일 프로세서 시스템을 사용하거나, 실행하려는 다른 프로세스가 있거나, 시스템 스케줄러가 다른 이유로 그렇게 지정하는 경우 서로 바꿔서 사용할 수 있습니다.

귀하의 예에서와 같은 동시 사용 중 루프의 동작은 스케줄러가 프로그램 외부에 반응하는 방식에 매우 민감할 수 있습니다. 따라서 이것은 당신이 의지하고 싶은 것이 아닙니다.

sleep(1)루프 내부에 명시적인 내용을 추가하면 보다 일관된 동작을 볼 수 있습니다. 또는 두 프로세스가 교대로 가능한 한 빨리 작업을 수행하도록 하려면 일종의 동기화를 구현해야 합니다.

관련 정보