封装fork/wait等操作, 编写函数 process_create(pid_t* pid, void* func, void* arg), func回调函数就是子进程执行的入口函数, arg是传递给func回调函数的参数.
4 #include <stdio.h>
5 #include <stdlib.h>
6 #include <unistd.h>
7 #include <sys/wait.h>
8
9
10 typedef void (*FUNC)();
11
12 void *func(void* arg)
13 {
14 char* str = (char*)arg;
15 printf("%s\n", str);
16 printf("child pid = %d\n", getpid());
17 }
18
19
20 int process_create(pid_t* pid, void* func, char* arg)
21 {
22 *pid = fork();
23 if(*pid < 0){
24 perror("fork error\n");
25 return -1;
26 }
27 else if(*pid == 0){
28 while(1){
29
30 FUNC funct = (FUNC)func;
31
32 funct(arg);
33 sleep(1);
34 }
35 }
36 else{
37 pid_t ret = waitpid(-1, NULL, 0);
38 printf("wait process success\n");
39 }
40 }
41
42 int main()
43 {
44 char* arg = "child is running!";
45 pid_t pid;
46 process_create(&pid, func, arg);
47 return 0;
48 }
49
50