进程控制2
-
使用waitpid(pid, status,0);填入子进程的pid,阻塞父进程,直到子进程结束了,然后把子进程的pcb结构体的状态码读取出来。
-
使用WIFEXITED(status)判断子进程是否正常退出,WEXITSTATUS(status)读取退出码来判断运行是否正常结束。
因为进程结束有3种情况:1.进程正常退出,并正确结束。2.进程正常退出,但是不正确结束。3进程被强制退出。
所以使用这两个宏定义函数可以判断一些情况 -
替换函数
execl将程序加载进程内存中。
int execl(const char *path, const char *arg, ...);
进程程序替换
进程替换本质是将指定的程序替换到原有的内存, 如果使用execl(),之后的代码后面就不会运行了。只要调用成功就接下来的代码就无关了。
perror()打印错误原因
使用execl()作为子进程,然后父进程可以与子进程相互独立运行
-
make默认只生成一个可执行程序
.PHONY:all
all: mybin mychild
mychild:mychild.c
gcc -o mychild mychild.c
mybin:mybin.c
gcc -o mybin mybin.c -
环境变量
使用environ传入系统环境变量,传入自定义环境变量方法putenv((char*)"myenv=1122"); -
在/proc/进程pid号下,可以看到进程很多的信息,其中就有进程现在的pwd工作目录,可以通过chdir来更改pwd的目录。这就是内置命令。
然后如果使用子进程来执行execl,那么在执行cd命令之后,只会子进程修改工作目录,所以是在父进程shell中先修改工作目录。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)