进程的执行退出函数

1.execl:

(1)函数的作用:执行文件

(2)函数的原型:int execl(const char *path,const char *argv,...);

(3)函数的参数:path:字符串代表的文件路径

                               argv:执行文件传递的参数地址,最后一个以NULL结束。

(4)函数的返回值:成功不返回,失败返回-1。

(5)头文件:#include <unistd.h>

2.execv:

(1)函数的作用:执行文件

(2)函数的原型:int execl(const char *path,const  *char argv[] );

(3)函数的参数:path:字符串代表的文件路径

                               argv[]:被执行程序所需的命令行参数数组。

(4)函数的返回值:成功不返回,失败返回-1。

(5)头文件:#include <unistd.h>

3.system:

(1)函数的作用:执行文件

(2)函数的原型:int system(const char *string)

(3)函数的参数:string:命令字符串。

(4)函数的返回值:在system调用/bin/sh失败时返回127,其他失败原因返回-1。若string为NULL时,则返回非0

值,如果执行成功则返回执行命令后的返回值。

(5)头文件:#include <stdlib.h>

4.wait:

(1)函数的作用:等待子进程中断或结束

(2)函数的原型:pid_t wait(int *status);

(3)函数的返回值:成功返回子进程的识别号,出错返回-1。

(4)头文件:#include <sys/types.h>

                       #include <sys/wait.h>

(5)说明:wait会暂停目前进程的执行,直到有信号来或子进程结束。如果调用wait时,子进程已经结束会立即结束。

5.waitpid:

(1)函数的作用:等待子进程中断或结束

(2)函数的原型:pid_t waitpid (pid_t pid, int * status, int options);

(3)函数的参数:参数:如果不在意结束状态值,则参数status可以设成NULL。 

                               参数pid为欲等待的子进程识别码:

\                              pid<-1 等待进程组识别码为pid绝对值的任何子进程。

                               pid=-1 等待任何子进程,相当于wait()。

                               pid=0 等待进程组识别码与目前进程相同的任何子进程。

                               pid>0 等待任何子进程识别码为pid的子进程。

                               参数option可以为0 或下面的OR 组合

                                WNOHANG:如果没有任何已经结束的子进程则马上返回,不予以等待。

                               WUNTRACED :如果子进程进入暂停执行情况则马上返回,但结束状态不予以理会。

(4)函数的返回值:成功返回子进程的pid,出错-1。如果使用WNOHANG,无子进程退出,则返回0。

6.exit:

(1)函数的作用:正常结束进程

(2)函数的原型:void exit(int status);

(3)头文件:#include <stdlib.h>

(4)说明:exit()用来正常终结目前进程的执行,并把参数status返回给父进程,而进程所有的缓冲区数据会自动写回

并关闭未关闭的文件。

7._exit:

(1)函数的作用:正常结束进程

(2)函数的原型:void  _exit(int status);

(3)头文件:#include <unistd.h>

(4)说明:_exit()用来立刻结束目前进程的执行,并把参数status返回给父进程,并关闭未关闭的文件。此函数调用

后不会返回,并且会传递SIGCHLD信号给父进程,父进程可以由wait函数取得子进程结束状态。

exit与_exit的区别:

_exit: 直接使进程停止,清除其使用的内存,并清除缓冲区中内容。

exit与 _exit的区别:在停止进程之前,要检查文件的打开情况,并把文件缓冲区中的内容写回文件才停止进程。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在主进程中使用exit函数无法直接退出子进,因为exit函数是于终止当进的。要退出子进,可以使用子进程的程ID(PID)和kill来发送一个信号给子进程,使其自行终止。 下面是一个示例,展示如何在主进中使用exit函数退出进程: ```c <stdio.h> #include <stdlib> #include <unistd.h <sys/types.h> #include <signal.h> int() { pid_t pid; // 使用fork()函数创建一个新的子程 pid = fork(); if (pid < 0) { // fork()失败,创建子进程失败 fprintf(stderr, "Fork failed\n"); return 1; } else if (pid == 0) { // 子进程执行的代码 printf("This is the child process\n"); // 子进程执行完毕后退出 exit(0); } else { // 父进程执行的代码 printf("This is the parent process\n"); // 延迟一段时间 sleep(2); // 发送SIGTERM信号给子进程,使其终止 kill(pid, SIGTERM); printf("Child process terminated\n"); // 父进程执行完毕后退出 return 0; } } ``` 在这个示例中,父进程使用kill函数发送SIGTERM信号给子进程,使其终止。然后父进程输出相关信息并退出。 请注意,这里使用的是SIGTERM信号,它是一个常用的终止信号。你也可以使用其他信号,具体取决于你的需求。 另外,值得注意的是,子进程执行exit函数后会立即终止,因此无法保证子进程能够执行完所有的清理操作。如果需要在子进程执行完一些特定任务后再终止,可以使用其他方式来通知子进程退出,如管道、共享内存等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值