进程编程基础
1. fork()
在linux中创建一个新进程的方法是使用fork()函数(一个特殊函数,看起来执行一次返回两个值)。
1-1. fork()函数说明:
fork()函数用于从已存在的进程中创建一个新进程。新进程称为子进程,而原进程称为父进程。使用fork()函数得到的子进程是父进程的一个复制品,它从父进程处继承了整个进程的地址空间,包括进程上下文、代码段、进程堆栈、内存信息、打开的文件描述符、信号处理函数、进程的优先级、进程组号、当前工作目录、根目录、资源限制和控制终端等,而子进程所独有的只有它的进程号、资源使用和计数器等。
因为子进程几乎是父进程的完全复制,所以父子两个进程会运行同一个程序,因此需要用一种方式来区分它们,并使它们照此运行,否则,这两个进程只能做相同的事。
父子进程是一个很重要的区别是:fork()的返回值不同,通过返回值来判断该进程是父进程还是子进程。
注意:子进程没有执行fork()函数,而是从fork()函数调用的下一条语句开始执行。
1-2. fork()函数语法:
/*******************************************************************
* > File Name: fork.c
* > Author: fly
* > Mail: 1358326274@qq.com
* > Create Time: 2021年03月09日 星期二 22时34分53秒
******************************************************************/
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int main(int argc, char* argv[])
{
pid_t ret;
ret = fork();
if(ret == -1)
{
perror("fork error");
return -1;
}
else if(ret == 0)
{
printf("In child process! ret: %d, PID: %d, PPID: %d\n", ret, getpid(), getppid());
}
else
{
printf("In parent process! ret: %d, PID: %d, PPID: %d\n", ret, getpid(), getppid());
}
return 0;
}
运行结果:
In parent process! ret: 64675, PID: 64674, PPID: 3724
In child process! ret: 0, PID: 64675, PPID: 64674
2. exec 函数族
2-1.exec函数族说明
2-2.exec函数族语法
2-3.exec使用实例
3.exit()和_exit()
3-1.exit()和_exit()函数说明
3-2.exit()和_exit()函数语法
3-3.exit()和_exit()使用实例
4.wait()和waitpid()
3-1.wait()和waitpid()函数说明
3-2.wait()和waitpid()函数语法
3-3.wait()和waitpid()使用实例