Linux进程、线程、内核操作函数

进程

1.        替换进程镜像

#include <unistd.h>

       extern char **environ;

       int execl(const char *path, const char*arg, ..., (char*)0);

       int execlp(const char *file, const char*arg, ..., (char*)0);

       int execle(const char *path, const char*arg, ..., char * const envp[]);

       int execv(const char *path, char *constargv[]);

       int execvp(const char *file, char *constargv[]);

           int execve(const char *file, char *const argv[], char *const envp[]);

1)        execl、execlp、execle参数可变,以空指针结束;execv、execvp第二个参数为一字符串数组。

2)        函数会把argv参数传递给main函数。

3)        以p结尾的函数会搜索PATH环境变量来查找新程序,不存在则使用绝对路径来传递给函数。

4)        exec函数不会返回调用它的函数。

2.        复制进程对象

#include <unistd.h>

#include<sys/types.h>

pid_t fork(void);

新进程与原进程一模一样,执行代码完全一样,只是有自己的数据空间、环境以及文件描述符。

返回值:

-1:创建失败;

0:当前进程为子进程;

非零:当前进程为父进程。

3.        进程等待

#include<sys/types.h>

#include<sys/wait.h>

pid_t wait(int*stat_loc);

pid_t waitpid(pid_t pid, int* stat_loc, int options);

int waitid(idtype_tidtype, id_t id, siginfo_t *infop, int options);

暂停父进程知道子进程结束为止。

stat_loc:

WIFEXITED

子进程正常结束,WIFEXITD(stat_loc)取非零值

WEXITSTATUS

WEXITSTATUS(stat_loc)非零时,为进程退出码

WIFSIGNALED

如果子进程因一个为捕获的信号终止,WIFSIGNALED(stat_loc)非零

WTERMSIG

WTERMSIG(stat_loc)非零,则为信号代码

WCOREDUMP

子进程意外终止,WCOREDUMP(stat_loc)取非零

WIFSTOPPED

WIFSTOPPED(stat_loc)非零,则为一个信号代码

 

4.        exit

退出进程。

进程通讯、信号

Linux 提供的大多数信号类型是供内核使用的,只有少数的几种信号可以用作在进程之间传送。下面给出常用的信号和它们的意义:

SIGHUP

当终止一个终端时,内核就把这一种信号发送给该终端所控制的所有进程。通常情况

下,一个进程组的控制终端是该用户拥有的终端,但不完全是如此。当进程组的首进程结

束时,就会向该进程组的所有进程发送这种信号。这就可以保证当一个用户退出使用时,

其后台进程被终止,除非有其它方面的安排。

SIGINT

当一个用户按了中断键(一般为Ctrl+C)后,内核就向与该终端有关联的所有进程发

送这种信号。它提供了中止运行程序的简便方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值