Linux-C编程-进程操作

1,linux进程操作

1.1 函数system

【调用fork】
system()会调用fork()产生子进程,由子进程来调用/bin/sh -c string来执行参数string字符串所代表的命令,此命令执行完后随即返回原调用的进程。在调用system()期间SIGCHLD 信号会被暂时搁置,SIGINT和SIGQUIT 信号则会被忽略。
函数原型:
int system(const char * string);
参数说明:
string:命令
int:返回值
  =-1:出现错误  
  =0:调用成功但是没有出现子进程  
  >0:成功退出的子进程的id(=127表示system()在调用/bin/sh时失败)

1.2 函数exec

【替换进程映像】

exec家族一共有六个函数,分别是:

int execl(const char *path, const char *arg0, ...... ,(char*)0);
int execlp(const char *file, const char *arg0, ......,(char*)0);
int execle(const char *path, const char *arg0, ......,(char*)0,char * const envp[]);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char * const argv[]);
int execve(const char *filename, char *const argv[], char *const envp[]);
1,其中只有execve是真正意义上的系统调用,其它都是在此基础上经过包装的库函数。

2,几个字母:
"l"代表 list即表示以list形式给出,但最后要加一个空指针,如果用常数0来表示空指针,则必须将它强行转换成字符指针,否则有可能出错。
"v"代表 vector即矢量,
"p"代表通过PATH环境变量来查找新程序的可执行文件路径,
"e"代表可以传入一个环境变量envp。

3,示例程序:

char *argv[]={“ls”,”-l”,(char *)0} //先定义一个指针数组
if (execv(“/bin/ls”,argv)) < 0)
{
	perror(“execl error!”);

}
#include <unistd.h>
main()
{
    char * const ps_argv[]={"ps","-ux",(char*)0};
    char * const ps_envp[]={"PATH=/bin:/usr/bin","TERM=console",(char*)0};

    //以下任选一种
    execl("/bin/ps","ps","-ux",(char*)0);
    execlp("ps","ps","-ux",(char*)0);
    execle("/bin/ps","ps","-ux",(char*)0,ps_envp);

    execv("/bin/ps",ps_argv);
    execvp("ps",ps_argv);
    execve("/bin/ps",ps_argv,ps_envp);
    
  
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值