加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

UNIX环境高级编程:进程管理和通信

发布时间:2016-09-27 18:52:05 所属栏目:Unix 来源:站长网
导读:副标题#e# 进程和程序的区别: 进程: 程序的一次执行过程 动态过程,进程的状态属性会发生变化 程序:存放在磁盘上的指令、数据的有序集合 是个文件,可直观看到 程序program 静态的概念,本身不会发生变化。指令谁来执行,数据谁来访问?cpu! 但前提是cpu

注意:

子进程持有的是上述存储空间的“副本”,这意味着父子进程间不共享这些存储空间。linux将复制父进程的地址空间内容给子进程,因此,子进程有了独立的地址空间。

#include<unistd.h>

pid_t vfork( void ) 

函数说明

vfork创建的子进程与父进程共享数据段,而且由vfork创建的。子进程将先于父进程运行。

返回值:  

如果vfork()成功则在父进程会返回新建立的子进程代码(PID),而在新建立的子进程中则返回0。如果vfork失败则直接返回-1,失败原因存于errno中。

错误代码 :

EAGAIN 进程数已达系统规定上限

ENOMEM 内存不足,无法配置核心所需的数据结构空间。

vfork()用法与fork()异同点:

fork():子进程拷贝父进程的数据段,代码段. vfork():子进程与父进程共享数据段.

fork():父子进程的执行次序不确定。vfork():保证子进程先运行,在调用exec或exit之前与父进程数据是共享的,在它调用exec,或exit之后父进程才可能被调度运行

vfork()保证子进程先运行,在她调用exec或exit之后父进程才可能被调度运行。

UNIX环境高级编程:进程管理和通信

创建子进程,(写时拷贝)拷贝数据段、代码 哪些不拷贝?(完整拷贝需要与线程区别)

进程的退出

return 0

void exit( int status )<stdlib.h>

void _exit( int status ) <unistd.h>

参数:

status 传递进程结束时的状态,通常0表示正常结束,非零表示出现错误,可以使用wait系统调用来接收子进程的返回值。

exit( )和_exit( )区别

_exit( ) 直接结束进程,清除其使用的内存空间,销毁其在内核中的数据结构,不刷新缓冲区。

exit( ) 退出时要清理缓存区

exec函数族

找到可执行文件,用它来取代原调用进程的数据段、代码、栈。进程号除外。

#include <unistd.h>
int execl ( 
        const char *path, 
        const char *arg, 
        …… 
        );
int execv ( 
            const char *path, 
            char * const argv[ ]
             );
int execle (
            const char *path, 
            const char *arg, 
            …… , 
            char * const envp[   ] 
            );
int execve( 
            const char *path, 
            char * const arg[ ],  
            …… , 
            char * const envp[ ] 
            );
int execlp( 
            const char *file, 
            const char *arg, 
            …… 
            );
int execvp ( 
            const char *file, 
            char *const arg, 
            …… 
            );

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读