这篇文章我慢慢的写,可能需要1~2个礼拜
1,实现多进程的方法
在linux下,实现多进程编程主要依靠两个方法
a,fork(),通过复制当前进程来建立新的进程,最基本的新建进程的操作,新建的进程为调用进程的子进程,属于同一个进程组
fork创建子进程的时候,会返回两个值,在父进程中返回子进程的标示,在子进程中返回0。因为fork会把父进程拷贝一份,所以分别返回就不足为奇了。
b,exec exec是一系列方法,其实功能是一样的,只是参数不一样,方便使用。exec的方法通过用一个新的程序覆盖原内存空间,来实现新的进程。
exec的方法包括以下几种
int execl( const char *path, const char *arg, ...);
int execlp( const char *file, const char *arg, ...);
int execle( const char *path, const char *arg , ..., char* const envp[]);
int execv( const char *path, char *const argv[]);
int execvp( const char *file, char *const argv[]);
所以一般新建进程的方法就是:用fork创建子进程,子进程中用exec来加载程序覆盖原内存空间,这样,新的进程就建立了。
写一个程序来验证一下
执行就是 ls的效果,当然最后会加上this is the parent process这句话,这是在父进程中定义的。注意到父进程中wait句,只有当子进程执行结束后,wait才会结束
2,进程间用管道通信
代码
管道之间的通信,如果在pipe()生成的管道中通信时,如果要用pipe管道替代标准输入输出,一定要在进程中关闭不必要的句柄,否则可能出现错误。例如下面这段程序需要在21行关闭管道输出,否则在子进程中将管道输出替代了标准输出,就不能将信息输出到标准输出了
如果在21行不关闭