[Linux]C语言Linux系统编程创建进程
2019-01-23
编程之家收集整理的这篇文章主要介绍了[Linux]C语言Linux系统编程创建进程,编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
搜索热词
@H_3010@1.进程ID
@H3010@每一个进程都由一个唯一的标识符表示,即进程ID,简称pid.系统保证在某时刻每个pid都是唯一的。
@H3010@1.1分配进程ID
@H301_0@缺省情况下,内核将进程ID的最大值限制为32768,可以在此处设置/proc/sys/kernel/pidmax,在短时间内,内核不会重用已经分配的ID.
@H301_0@2.获得进程id和父进程id
#include pid=ppid=
@H_3010@3.运行新进程
@H3010@首先创建新的进程fork()
@H301_0@在新的进程中执行程序exec系列的系统调用
@H_301_0@4.exec系列的系统调用
@H_301_0@execl()函数的原型为 int execl(const char path,const chararg,...)
@H_3010@path是程序路径,arg是传递给指定程序的可变长度参数列表,最后必须是null结尾
@H3010@const 也可以和指针变量一起使用,这样可以限制指针变量本身,也可以限制指针指向的数据。
@H301_0@通常情况下execl()不会返回结果,成功的调用会以跳到新的程序的入口点作为结束,错误的时候会返回-1
=execl(,,(ret==
@H_301_0@5.fork()系统调用
@H_301_0@创建一个和当前进程映像一样的进程可以通过fork()系统调用,调用者从fork()返回后,仍然继续运行。
@H_3010@当前进程就是父进程,创建成功的进程是子进程。
@H301_0@在父进程成功的fork()调用,会返回子进程的pid
@H_301_0@在子进程fork()调用会返回0
#include ret=(ret>
pid
=ppid
=printf(
d,ppid,ret);
sleep(3);//父进程不能太快终止,否则看不出子进程ppid的效果
}else if(ret==0){
pid=getpid();
ppid=getppid();
printf("我是子进程,pid=%d,ppid=%d \n",ppid);
}else if(ret==-1){
perror("fork");
}
}