Linux应用层开发学习记录---(2)多进程程序设计

进程简单来说就是程序的一次动态运行活动把。

1.对进程的操作函数

1.创建进程
(1)fork 创建的子进程有独立的数据段、堆栈,并且是先父后子。
(2)vfork 创建的子进程没有独立的数据段、堆栈,为阻父先子。

2.退出进程
(1)return 只有父进程能使用。
(2)exit 父进程和子进程都能使用,参数为0表示正常、1表示异常。

3.等待进程
(1)wait 挂起调用的进程,直到其一个子进程结束。
(2)waitpid 包含wait的功能,还有一些其他功能。

4.执行程序
(1)exec 保留原有的进程,新代码覆盖原代码段,执行新的代码。
(2)system 创建新的进程来执行新的代码。

2.进程间的通信

作用为数据传输、资源共享、消息通知和进程控制。

1.管道类:无名管道(pipe)和有名管道(FIFO)。(常用于数据传输)
其都是单向的,有固定的读写端;
都存在读空或者写满会阻塞;
数据读走后,就会从管道中消失。
(1)无名管道(pipe) 只能用于父子进程之间的通信。
pipe创建无名管道、pipefd[0]为读端、pipefd[1]为写端。
(2)有名管道(FIFO)任意进程通信
mkfifo创建有名管道、unlink删除有名管道、对于读文件只能RDONLY、写文件只能WRONLY。

2.信号通信:进程A/内核发送信号到进程B。(常用于时间通知)
常见信号有:SIGKILL、SIGSTOP、SIGCHID.
kill发送信号、signal处理信号、pause等待信号

3.信号量:只有分为信号量互斥和信号量同步。(主要用于资源共享)
semget 打开或者创建信号量、semop操作信号量(获取或者释放)、semctl控制信号量(设信号量初值或者查看信号量初值等)

常见的还有共享内存和消息队列以后再学吧。

你可能感兴趣的:(Linux应用层开发学习记录---(2)多进程程序设计)