网站大量收购独家精品文档,联系QQ:2885784924

linux进程把持函数.ppt

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
linux进程把持函数

Linux进程控制函数 fork()   #include unistd.h   #includesys/types.h   pid_t fork( void ); 一个现有进程可以调用fork函数创建一个新进程。由fork创建的新进程被称为子进程。子进程是父进程的副本,它将获得父进程数据空间、堆、栈等资源的副本。 pid_t 是一个宏定义,其实质是int,定义sys/types.h中。 返回值: 若成功调用一次则返回两个值,子进程返回0,父进程返回子进程ID;否则,出错返回-1。 注意:子进程持有的是上述存储空间的“副本”,这意味着父子进程间不共享这些存储空间。linux将复制父进程的地址空间内容给子进程,因此,子进程有了独立的地址空间。 为什么fork()会返回两次? 由于在复制时复制了父进程的堆栈段,所以两个进程都停留在fork函数中,等待返回。因此,fork函数会返回两次。 一次是在父进程中返回,另一次是在子进程中返回,这两次的返回值是不一样的。 示例代码   #includesys/types.h   #includeunistd.h   #includestdio.h   int main(int argc, char ** argv )   {   int pid = fork();     if (pid == -1 ) {    printf(error!);   } else if( pid == 0 ) {    printf(This is the child process!);    } else{    printf(This is the parent process! child process id = %d, pid);     }    return 0;   } System()   #includestdlib.h int system(const char * string); system()会调用fork()产生子进程,由子进程来调用/bin/sh -c string来执行参数string字符串所代表的命令,此命令执行完后随即返回原调用的进程。 如果system()在调用/bin/sh时失败则返回127,其他失败原因返回-1。如果system()调用成功则最后会返回执行shell命令后的返回值,但是此返回值也有可能为 system()调用/bin/sh失败所返回的127,因此最好能再检查errno 来确认执行成功。   #includestdlib.h   main()   {    system(“ls -al /etc/passwd /etc/shadow”);   } 执行结果:   -rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwd   -r--------- 1 root root 572 Sep 2 15 :34 /etc/shado 示例代码 Exec() #include unistd.h 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[]); int execve(const char *path, char *const argv[], char *const envp[]); exec..是一个函数族,这里列出了它的六个函数。 功 能: 装入并运行其它程序。 fork()创建一个进程,但是这个进程只能局限在自身的代码段范围内,不能去执行别的程序;使用exec函数调用,用于从一个进程的地址空间中执行另外一个进程,覆盖自己的地址空间,执行别的用户程序。   Exec() 一个进程使用exec执行后,代码段、数据段、bss段和堆栈都被新程序覆盖,唯一保留的是进程号。 *path说明由路径名指定执行程序。 如:execl(“/bin/ls”,…) *file说明由文件指定执行程序。 其第二个参数以及用省略号表示的其他参数一起组成了该程序执行时的参数表,按照linux中

文档评论(0)

my18 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档