여기서 C 언어에서 fork() 및 exec() 시스템 호출의 효과를 살펴보겠습니다. 포크는 호출 프로세스를 복사하여 새 프로세스를 만드는 데 사용됩니다. 새 프로세스는 하위 프로세스입니다. 다음 속성을 참고하시기 바랍니다.
fork()는 하위 프로세스의 PID를 반환합니다. 값이 0이 아니면 상위 프로세스의 ID이고, 값이 0이면 하위 프로세스의 ID입니다.
exec() 시스템 호출은 현재 프로세스 이미지를 새 프로세스 이미지로 바꾸는 데 사용됩니다. 프로그램을 현재 공간에 로드하고 진입점에서 실행합니다.
따라서, fork()와 exec()의 주요 차이점은 fork()가 기본 프로세스와 동일한 프로세스의 새 복사본을 시작한다는 것입니다. exec()는 현재 프로세스 이미지를 새로운 프로세스 이미지로 대체하며, 상위 프로세스와 하위 프로세스가 동시에 실행됩니다.
#include <stdio.h> #include <sys/types.h> #include <unistd.h> #include <stdlib.h> #include <errno.h> #include <sys/wait.h> int main() { pid_t process_id; int return_val = 1; int state; process_id = fork(); if (process_id == -1) { //when process id is negative, there is an error, unable to fork printf("can't fork, error occured</p><p>"); exit(EXIT_FAILURE); } else if (process_id == 0) { //the child process is created printf("The child process is (%u)</p><p>",getpid()); char * argv_list[] = {"ls","-lart","/home",NULL}; execv("ls",argv_list); // the execv() only return if error occured. exit(0); } else { //for the parent process printf("The parent process is (%u)</p><p>",getppid()); if (waitpid(process_id, &state, 0) > 0) { //wait untill the process change its state if (WIFEXITED(state) && !WEXITSTATUS(state)) printf("program is executed successfully</p><p>"); else if (WIFEXITED(state) && WEXITSTATUS(state)) { if (WEXITSTATUS(state) == 127) { printf("Execution failed</p><p>"); } else printf("program terminated with non-zero status</p><p>"); } else printf("program didn't terminate normally</p><p>"); } else { printf("waitpid() function failed</p><p>"); } exit(0); } return 0; }
The parent process is (8627) The child process is (8756) program is executed successfully
위 내용은 C 언어에서 fork()와 exec()의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!