linux 下的多进程编程 总结

这篇文章我慢慢的写,可能需要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行不关闭

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章