(1.1.20) C 프로그램의 Fock() 함수

4629 단어
  • 1 예 1
  • 4
  • 2 예 2
  • 3 예3
    4
  • 예 4

  • fork () 는 프로그램이 두 프로세스로 나누어지게 합니다.하위 프로세스가 부모 프로세스의 대부분을 복사합니다.
    (1) 예1
    
    #include<stdio.h>
    #include<unistd.h>
    int main(){    
    int i=1;    
    if(!fork())i++;   
     printf("%d
    "
    ,i); //1 2 if(!fork())i++; printf("%d
    "
    ,i); //1 2 2 3 return 0;}

    if(!fork())i++; 하위 프로세스만 i++ 실행
    프로세스가 A의 첫 번째 fok()로 시작되면 프로세스 B가 생성됩니다.
    첫 번째 printf A 출력 1 B 출력 2
    두 번째 fork () A 생성 프로세스 A1 B 생성 프로세스 B1
    두 번째 printf A 출력 1 B 출력 2 A1 출력 2 B1 출력 3
    (2) 예제 2
    #include <stdio.h>
    #include <sys/types.h>
    #include <unistd.h>
    
    int main(void)
    {
       int i;
       for(i=0; i<2; i++){
          fork();
          printf("-");
       }
    
       return 0;
    }

    출력은 8개'-'입니다.
    프로그램이 시작되면 bash에서 프로세스 P1을 생성하여 이 프로그램을 실행합니다. P1이 프로그램에 들어간 후 i=0이 되면 fork ()는 하위 프로세스 P2를 생성하고 '-' 를 출력합니다.P2는 P1의 환경 변수, PC 등 환경을 계승하여 P2가'-'를 출력합니다.동시에 i=1, for 순환을 계속 실행합니다 - P2는 하위 프로세스 P3을 먼저 출력하고 '-'를 출력합니다.P3 프로세스는 P2의 하위 프로세스로 부모 프로세스 P2의 지령, 변수 값, 프로그램 호출 창고, 환경 변수, 버퍼 등을 복사하여'-'를 출력합니다. 여기서 P3는 P2의 버퍼를 계승하기 때문에 그 중'-'가 있기 때문에 P3는'-'두 개를 출력합니다.P1이 프로그램에 들어간 후 i=1일 때 fork ()는 다른 하위 프로세스 P4를 생성하고 '-' 를 출력합니다.P4 역시 "-"를 출력합니다.P4는 P1의 하위 프로세스이기 때문에 P1의 버퍼를 계승합니다. 그 중 하나는 '-' 이기 때문에 P4는 두 개의 '-' 를 출력합니다.
    위의 printf("-")를
    printf("-
    "
    );

    fflush를 호출해서 캐시를 제거하십시오.
    printf("-");  
    fflush(stdout);  

    6개의'-'출력을 보정할 수 있습니다.
    (3) 예제 3
    #include<stdio.h>
    #include<sys/types.h>#include<unistd.h>intmain(void){
    inti;
    for(i=0;i<2;i++){fork();
    //printf
    printf("ppid=%d,pid=%d,i=%d
    "
    ,getppid(),getpid(),i);} sleep(10);// , pstree return0;}

    ppid=8858,pid=8518,i=0 ppid=8858,pid=8518,i=1 ppid=8518,pid=8519,i=0 ppid=8518,pid=8519,i=1 ppid=8518,pid=8520,i=1 ppid=8519,pid=8521,i=1
    예 4
    main 프로세스 자체를 제외하고 도대체 몇 개의 프로세스를 만들었습니까?
    int main(int argc, char* argv[]) { fork(); fork() && fork() || fork(); fork(); }
    18 19 20 21
    우선, 이 문제의 고찰점 1.fork 호출 한 번, 두 번 되돌아오기, 하위 프로세스 한 번 0, 부 프로세스 한 번pidt 2. A & & B | | C의 논리와 논리 또는.A & B | | C, A 가 가짜일 경우 (0 으로 표시) 직접 단락 B, 즉 B 는 실행하지 않습니다.그리고 (A & B) 을 표현식이라고 할 수 있습니다. 이 표현식 값이 1이면 C가 실행되지 않습니다.그런 다음 제목을 분석합니다.
    20-1=19

    좋은 웹페이지 즐겨찾기