今天又用到fork,真讨厌,每次用的时候都的查一次,这次记录一下,别老是忘记。
1) fork后执行命令
居然不会带参数的,这次记下,execlp为例:
execlp("/bin/ls","/bin/ls","-l","/tmp/", NULL);
2) fork后进程的执行顺序
fork后顺序不定,有时父进程先执行,有时是子进程,看kernel的调度。
如果想让子进程先执行,方法好像好几个:
a) 使用vfork(),它可以保证子进程先执行
b) 父进程执行waitpid()
c) 父进程sleep(n)一会儿
不过我的目的是想保证下父进程先执行,没查到什么好办法,最后只能用子进程先sleep(n)一会儿的方法。
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
int main(int argc, char ** argv)
{
pid_t pid;
#if 1
signal(SIGTTOU,SIG_IGN);
signal(SIGTTIN,SIG_IGN);
signal(SIGTSTP,SIG_IGN);
signal(SIGHUP,SIG_IGN);
#endif
//pid = vfork(); //保证子进程先执行时
pid = fork();
if( pid == 0 )
{
sleep(5);
printf ("子进程/n");
pid = fork();
//pid = vfork(); //保证子进程先执行时
if (pid < 0){
printf ("Error/n");
}else if(pid > 0){
printf ("子父进程/n");
exit(0);
}else{
sleep(5);
printf ("子子进程/n");
execlp("/bin/ls","/bin/ls","-l","/tmp/", NULL);
exit(0);
}
}else if(pid < 0){
printf("Error/n");
}else{
printf ("父进程/n");
}
return 0;
}