您的位置:首页 > 运维架构 > Linux

Linux下进程的创建(system(); fork(); exec*())

2016-05-17 22:51 513 查看
0. system();

system()函数通过调用shell程序来执行所指向的命令(效率低),相当于先fork(),再execve();
特点:原进程和子进程各自运行,且原进程需要等子进程运行完后再继续;

1. fork();

参考文献: linux中fork同时创建多个子进程的方法(一)

在Linux中用fork()由一个父进程创建同时多个子进程的格式如下:

int status,idx;

for (idx = 0; idx < 10; idx++) {
status = fork();
if (status == 0 || status == -1) break;  // 每次循环时,如果发现是子进程就直接从创建子进程的循环中跳出来,不让你进入循环,这样就保证了每次只有父进程来做循环创建子进程的工作
}

if (status == -1) {
//error
} else if (status == 0) {  // 每个子进程都会执行的代码
//sub process
} else {
//parent process
}


参考文献:进程控制:linux中fork同时创建多个子进程注意事项

/* 这里不可以一下就创建完子进程,要用
*要 创建-》判断-》使用-》return or exit.更不能这样如test2.c
*childpid1 = fork();
*childpid2 = fork();
*childpid3 = fork();
*/
childpid1 = fork();                                             //创建
if(0 == childpid1)                                              //判断
{                                                               //进入
printf("In child1 process\n");
printf("\tchild pid = %d\n", getpid());
exit(EXIT_SUCCESS);                                         //退出
}


2. exec*();

参考文献:

linux系统编程之进程(五):exec系列函数

Linux下execl学习

编译中出现的错误:

使用execl()函数时出现warning: not enough variables to fit a sentinel

解决方法 - 调整execl中的参数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: