简单的进程间通信
命令行参数:
情况1:在终端执行程序时,给子进程传递命令行参数。
情况2:使用vfork+exec创建进程时,给子进程传递命令行参数。
只能在父子进程之间,在父进行创建子进程时使用,只能由父进行传递给子进程,单向通信,并且只能传递一些简单的字符串数据。
环境变量表:
情况1:使用fork创建子进程时,子进程会拷贝一份父进程的环境变量表。
情况2:使用vfork+exec创建进程时,给子进程传递一份父进程的环境变量表,子进程拿到环境表后会进行拷贝。
只能在父子进程之间,父进行创建子进程时使用,只能由父进行传递给子进程,单向通信,并且只能传递一些简单的字符串数据。
信号:
情况1:使用kill向指定的进程发送信号进行通信。
情况2:使用sigqueue向指定的进程发送信号,也可以附带一些简单的数据。
可以在任意进程之间进行通信,但也只能是互相告知某某事件发生了,即使用能使用sigqueue带一些数据,但只有能传递一个int类型整数,只有通过fork创建的子进程才能传递内存地址。
文件:
情况1:使用文件+信号,让任意两个进程之间传递大量数据,但要各自控制好位置指针,协调好读写时间。
情况2:使用文件+文件锁,也可以让任意两个进程之间传递大量数据,但文件锁的操作比较麻烦,也有可能陷入死锁的情况。
单纯的使用文件进行通信,无法协调读取和写入的时间,空间造成文件内的数据混乱,所以必须配合使用信号或文件锁。