[Linux]C语言Linux系统编程创建进程详解编程语言
2023-06-13 09:20:37 时间
1.进程ID
每一个进程都由一个唯一的标识符表示,即进程ID,简称pid.系统保证在某时刻每个pid都是唯一的。
1.1分配进程ID
缺省情况下,内核将进程ID的最大值限制为32768,可以在此处设置/proc/sys/kernel/pid_max,在短时间内,内核不会重用已经分配的ID.
2.获得进程id和父进程id
#include stdio.h #include sys/types.h #include unistd.h int main(){ int pid=getpid(); int ppid=getppid(); printf("pid:%d ppid:%d /n",pid,ppid); }
3.运行新进程
首先创建新的进程fork()
在新的进程中执行程序exec系列的系统调用
4.exec系列的系统调用
execl()函数的原型为 int execl(const char *path,const char *arg, )
path是程序路径,arg是传递给指定程序的可变长度参数列表,最后必须是null结尾
const 也可以和指针变量一起使用,这样可以限制指针变量本身,也可以限制指针指向的数据。
通常情况下execl()不会返回结果,成功的调用会以跳到新的程序的入口点作为结束,错误的时候会返回-1
int ret; ret=execl("/usr/bin/vim","vim","text.txt",NULL); if(ret==1){ printf("execl error"); }
5.fork()系统调用
创建一个和当前进程映像一样的进程可以通过fork()系统调用,调用者从fork()返回后,仍然继续运行。
当前进程就是父进程,创建成功的进程是子进程。
在父进程成功的fork()调用,会返回子进程的pid
在子进程fork()调用会返回0
#include stdio.h #include unistd.h int main(){ int pid,ppid; int ret=fork(); if(ret 0){ pid=getpid(); ppid=getppid(); printf("我是父进程,pid=%d , ppid=%d ,我新建的子进程pid=%d/n",pi d,ppid,ret); sleep(3);//父进程不能太快终止,否则看不出子进程ppid的效果 }else if(ret==0){ pid=getpid(); ppid=getppid(); printf("我是子进程,pid=%d , ppid=%d /n",pid,ppid); }else if(ret==-1){ perror("fork"); }
我是父进程,pid=13890 , ppid=10038 ,我新建的子进程pid=13891
我是子进程,pid=13891 , ppid=13890
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/12514.html
cjava相关文章
- Linux下的快捷退出进程技巧(linux退出进程)
- Linux系统资源有效利用(linuxrs)
- Linux中唯一的进程实例(linux进程唯一实例)
- 管理Linux 子进程状态管理:解决难题的正确方法(linux子进程状态)
- Linux进程列表:掌控系统中的运行状况(linux进程列表)
- Linux下的进程调度程序:突破性设计与性能剖析(linux进程调度程序)
- Linux下串口测试:一次成功(linux下测试串口)
- Linux 文本处理之旅(linux文本)
- 如何修改Linux系统IP信息(修改linux系统ip)
- 库掌握Linux下编译静态库的技巧(linux编译静态)
- 查找Linux文件:技巧与方法(linux文件中查找)
- Linux高效管理文件类型的命令(linux文件类型命令)
- Linux之父的分支:一次性了解Linus Torvalds的作品(linux的分支)
- Linux 查看系统调用:学习指南(linux查看系统调用)
- Linux优秀无线驱动的使用方法(linux无线驱动)
- Linux 简单指导:如何创建目录链接(linux创建目录链接)
- Linux C语言编程入门指南(linuxc语法)
- 如何使用Linux系统进行还原(linux怎么还原)
- Linux下实现进程管理的命令行指南(linux进程管理命令)
- Linux主机轻松重启!(linux主机重启)