好久没有写博客了,最近在学校做实验的时候遇到一个同时创建两个进程的实验,让我对多进程编程有了新的认识,就一个进程退出的问题让我纠结了几天!
我的问题及解决
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main(int argc, char **argv)
{
pid_t pid;
printf("the parent process id[%d]\n", getppid());
pid = fork();
if(pid < 0)
{
printf("failture\n");
return -1;
}
else if(pid == 0)
{
printf("child1 start running, the id[%d]\n", getpid());
return 0;
//exit(1);
}
pid = fork();
{
printf("failture\n");
return -1;
}
else if(pid == 0)
{
printf("child2 start running, the id[%d]\n", getpid())
return 0;
//exit(1);
}
return 0;
}
刚开始创建进程时总会出现乱码,进程抢占的问题没有规定,也就是究竟哪个进程先运行没有约定,所以运行的结果是乱的
然后这样的话,在创建第一个子进程后,这时的父进程和子进程不知道哪个先运行由系统决定,所以这里便会出现乱的,解决方法就是在创建第一个子进程后return 0或exit(1)让他退出,让父进程继续运行接着创建第二个子进程。

这时就是有序的运行两个子进程,打印的东西也是按照我们写的内容走的!
同时创建多个子进程其实就是调用多次fork()函数,这里可以用for循环,或者像我这样一个一个的调,但是在创建的之后记得要退出,不然会很乱!
查看进程命令
查看进程的命令我们用的多的就是ps,但是top命令也可以查看,但是它“不纯”。PS工具标识进程的5种状态码: D 不可中断 uninterruptible sleep (usually IO) R 运行 runnable (on run queue) S 中断 sleeping T 停止 traced or stopped Z 僵死 a defunct (”zombie”) process

ps查看正处于Running的进程

ps aux查看所有的进程:

top命令经常用来监控Linux的系统状况,比如cpu、内存的使用top 运行中可以通过 top 的内部命令对进程的显示方式进行控制。内部命令如下:

直接输入top命令如下:

上面显示的第一行是系统运行时间和平均负载,第二行是任务,第三行是目前cpu的状态,第四五行是内存的使用情况,下面的内容就是各个进程的运行情况!
这篇博客分享了在Linux环境下如何同时创建并有序执行多个进程的经验。通过解决进程抢占导致的运行混乱问题,作者指出在创建第一个子进程后,父进程应退出以确保后续进程按预期顺序运行。此外,还介绍了使用`fork()`函数创建进程以及利用`ps`和`top`命令查看系统进程的方法。
7689

被折叠的 条评论
为什么被折叠?



