항상 상위 프로세스가 완료된 후에 하위 프로세스가 실행된다고 생각했는데, 다음 프로그램을 실행하고 나면 가끔 상위 프로세스, 하위 프로세스, 대체 프로세스만 출력되는 결과가 나오는데, 그게 바로 스케줄러인 것 같아요. 프로세스를 변경했지만 작업에서 둘 다 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)
루프 내부에 명시적인 내용을 추가하면 보다 일관된 동작을 볼 수 있습니다. 또는 두 프로세스가 교대로 가능한 한 빨리 작업을 수행하도록 하려면 일종의 동기화를 구현해야 합니다.