fork.c
#include <sys/types.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> int main(void) { pid_t result; result = fork(); if (result == -1) { printf("Fork Error! "); } else { if (result == 0) { printf("The returned value is %d The child process!! My PID is %d ", result, getpid()); } else { printf("The returned value is %d The father process!! My PID is %d ", result, getpid()); } } return 0; }
exec.c
#include <unistd.h> #include <stdio.h> #include <stdlib.h> int main(void) { pid_t result; result = fork(); if (result == 0) { if (execlp("ps", "ps", "-ef", NULL) < 0) { printf("Execlp error "); } } return 0; }
waitpid.c
#include <sys/types.h> #include <sys/wait.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> int main(void) { pid_t pc, pr; pc = fork(); if (pc < 0) { printf("Error fork "); } else if (pc == 0) { sleep(5); exit(0); } else { do { pr = waitpid(pc, NULL, WNOHANG); if(pr == 0) { printf("The child process has not exited! "); sleep(1); } }while (pr == 0); if (pr == pc) { printf("Get child exit code: %d ", pr); } else { printf("Some error occured. "); } } return 0; }
参考资料:《嵌入式Linux应用程序开发标准教程》