如何创建进程?
直接使用fork函数,创建子进程。调用fork函数的时候会有一个fpid返回值。
注意:这里的fpid在执行fork后为两个,子进程一个是为0,父进程一个是子进程的id。注意fpid 不是父进程的和子进程的id!!!
通过判断fpid切换到父进程子进程:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
pid_t fpid;//fpid表示fork函数返回的值
int count=0;
fpid=fork();
if (fpid < 0)
printf("error in fork!");
else if (fpid == 0) {
printf("parent fpid:",fpid);
printf("i am the child process, my process id is %d\n",getpid());
printf("I’m children\n");
count +=2;
}
else {
printf("parent fpid:",fpid);
printf("i am the parent process, my process id is %d\n",getpid());
printf("I’m parent.\n");
count++;
}
printf("统计结果是: %d/n",count);
return 0;
}
说明:这里子进程复制父进程的资源。两者独立。但是这种创建进程的方式特别慢。
如何销毁创建的进程?
使用exit()函数
这里使用的时候会有一个返回值,返回子进程的状态。
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
pid_t fpid;//fpid表示fork函数返回的值
int count=0;
int status = 0;
fpid=fork();
if (fpid < 0)
printf("error in fork!\n");
else if (fpid == 0) {
printf("i am the child process, my process id is %d\n",getpid());
printf("I’m children\n");
count +=2;
exit(2); //这里直接返回结束子进程
}
else {
printf("i am the parent process, my process id is %d\n",getpid());
printf("I’m parent.\n");
count++;
}
printf("统计结果是: %d\n",count);
//父进程捕捉子进程的状态
wait(&status);
printf("parent: status: %d\n", WEXITSTATUS(status));
return 0;
}
在销毁子进程的时候可以返回一个状态。用wait()函数接收。如图。