先介绍一下wait:
wait()会暂时停止目前进程的执行,直到有信号来到或子进程结束。如果在调用wait()时子进程已经结束,则wait()会立即返回子进程结束状态值。子进程的结束状态值会由参数status 返回,而子进程的进程识别码也会一快返回。如果不在意结束状态值,则参数status 可以设成NULL。子进程的结束状态值请参考waitpid()。
头文件: #include <sys/wait.h>
函数原型: pid_t wait(int *status);
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<wait.h>
void* fun_child(void *arg) {
char* str = (char*)arg;
printf("%s\n", str);
}
void process_creat(pid_t* pid, void* func(void *), void* arg) {
if(pid == NULL || func == NULL) {
return;
}
*pid = fork();
if(*pid < 0) {
perror("fork");
exit(1);
}
else if(*pid == 0) {
while(1) {
func(arg);
sleep(1);
}
}
else{
int status;
//pid_t ret = waitpid(-1, &status, 0);
pid_t ret = wait(&status);
printf("子进程的pid:%u 子进程被%d号信号杀死\n", ret, status);
}
}
int main()
{
char* arg = "child is runing!";
pid_t pid;
process_creat(&pid, fun_child, arg);
return 0;
}
调用process_creat,函数中执行fork创建子进程,并对是否调用成功进行判断,然后使子进程一直执行func函数