linux0进程
① linux下的PID=0的进程是什么进程
linux全局下没有pid=0的进程
linux下的pid起始数为1
永远是init进程
编程的时候
pid=0
同一个进程组的进程
② Linux中的进程问题,以及exit(0); 和sleep(5);
俺跟你解释一下:
fork是一个跟当前进程一模一样的进程,包括当前进程的所有状态(有特殊设置就不会拷贝,如文件标识)。子进程如果不设置新的执行程序,会继续执行fork之后的代码,注意前面提过的跟父进程一模一样的代码。
pid==0代表是子进程,因此子进程会执行这段代码:
if(pid==0)
{
printf("child!!! ");
//这里会造成子进程的主线程,main执行线程,阻塞5秒
sleep(5);
exit(0);
}
pid > 0 代表是父进程,因此父进程继续执行的代码为:
if(pid>0)
{
//此处必须等待子进程结束,子进程调用exit(0),时会通知父进程继续执行
//属于进程间通讯、同步的一个手段之一。那子进程等待5秒被唤醒,执行exit(0)
//父进程收到通知,获取到子进程的退出状态,继续就会printf,基本也就是等待了5秒
//然后父进程return0等价于exit(0)正常结束
wait(NULL);//不这样写,父进程直接结束可能会产生僵尸进程,也可能变成孤儿进程由
//由init进程领养,并正确结束。通用的做法必须wait。根据操作系统以及版本不同处理
//方式可能不一样,如aix可能就会有僵尸进程产生
printf("father!!! ");
}
③ linux 进程的几种状态
Linux内核中定义了以下几种状态:
#define TASK_RUNNING 0
#define TASK_INTERRUPTIBLE 1
#define TASK_UNINTERRUPTIBLE 2
#define TASK_ZOMBIE 4
#define TASK_STOPPED 8
其中:
TASK_RUNNING是就绪态,进程当前只等待CPU资源。
TASK_INTERRUPTIBLE和TASK_UNINTERRUPTIBLE都是阻塞态,进程当前正在等待除CPU外的其他系统资源;前者可以被信号唤醒,后者不可以。
TASK_ZOMBIE是僵尸态,进程已经结束运行,但是进程控制块尚未注销。
TASK_STOPPED是挂起状态,主要用于调试目的。进程接收到SIGSTOP信号后会进入该状态,在接收到SIGCONT后又会恢复运行。
④ 为什么Linux的0号进程永远不能被删除
这个是系统的启动进程
如果你可以删除这个进程,那你一回车系统就直接crash了
⑤ 你好,请问Linux下怎么在终端上看到0号进程
0号进程即为idle进程或swapper进程,也就是空闲进程 idle是一个进程,其pid为0
pidof programe-name(获得想了解的进程(programe-name)的PID)
cd /proc/$PID/fd(会看见文件描述符)
ls -l 得到文件描述符指向的实际文件,即当前进程打开的文件
也可以试试 lsof -c programe-name 看看《Linux就该这么学》 里面有个专栏是 Linux命令大全(手册,
⑥ linux中进程0是如何被创建的
请看 blog.csdn.net/zwjlpeng/article/details/9418229 ,解释得相当清楚。
⑦ linux第一个进程标识符为0吗
PID是进程标识符,你可以打开任务管理器,在菜单上点"查看","选择列",把PID调出来,然后就可以在任务管理器里面看到每个任务的PID了,找到PID为0,1,2,3,4,5的进程,就可以知道是哪个进程
⑧ Linux内核中进程0的主要任务是什么
总结一下有如下几个要点:
1.
进程0是所有其他进程的祖先,
也称作idle进程或swapper进程.
2.
进程0是在系统初始化时由kernel自身从无到有创建.
3.
进程0的数据成员大部分是静态定义的,即由预先定义好的INIT_TASK,
INIT_MM等宏初始化.
进程0的描述符init_task定义在arch/arm/kernel/init_task.c,由INIT_TASK宏初始化。
init_mm等结构体定义在include/linux/init_task.h内,为init_task成员的初始值,分别由对应的初始化宏如INIT_MM等初始化
Process
1
进程0最终会通过调用kernel_thread创建一个内核线程去执行init函数,这个新创建的内核线程即Process
1(这时还是共享着内核线程0的资源属性如地址空间等)。init函数继续完成剩余的内核初始化,并在函数的最后调用execve系统调用装入用户空间的可执行程序/sbin/init,这时进程1就拥有了自己的属性资源,成为一个普通进程(init进程)。至此,内核初始化和启动过程结束。下面就进入了用户空间的初始化,最后运行shell登陆界面。(注:Init进程一直存活,因为它创建和监控在操作系统外层执行的所有进程的活动。)
——————
这段对进程0的描述引用自《Understanding
The
Linux
Kernel
-
Third
Edtion》
The
ancestor
of
all
processes,
called
process
0,
the
idle
process,
or,
for
historical
reasons,
the
swapper
process,
is
a
kernel
thread
created
from
scratch
ring
the
initialization
phase
of
Linux.
This
ancestor
process
uses
the
following
statically
allocated
data
structures
(data
structures
for
all
other
processes
are
dynamically
allocated)