Di sini, kita akan melihat kesan panggilan sistem fork() dan exec() dalam bahasa C. fork digunakan untuk mencipta proses baharu dengan menyalin proses panggilan. Proses baru adalah proses kanak-kanak. Sila rujuk hartanah berikut.
fork() mengembalikan PID proses anak. Jika nilainya bukan sifar, ia adalah ID proses induk, jika nilainya 0, ia ialah ID proses anak.
Panggilan sistem exec() digunakan untuk menggantikan imej proses semasa dengan imej proses baharu. Ia memuatkan atur cara ke dalam ruang semasa dan menjalankannya dari titik masuk.
Jadi, perbezaan utama antara fork() dan exec() ialah fork() memulakan salinan baharu proses yang sama dengan proses utama. exec() menggantikan imej proses semasa dengan imej proses baharu, dan proses induk dan proses anak dilaksanakan pada masa yang sama.
#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
Atas ialah kandungan terperinci Dalam bahasa C, apakah perbezaan antara fork() dan exec()?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!