首先,回答进程管理(一)遗留下的几个问题:
问题一:为什么说ps是静态的,而top是动态的,解释如下:
ps:将某个时间点的进程运行情况撷取下来
top:相对于ps是选取一个时间点的进程状态,top则可以持续检测进程运行的状态。具体的使用方式和一些参数的解释将在下文详细说明。
问题二:如果一个进程有一段时间是S状态,那么这段时间是否计入TIME ?
我们知道,TIME的意义是某一个进程实际使用CPU的时间,回顾上一篇博客的进程状态中的R状态即Running状态,它指的是可执行状态,只有在该状态的进程才能在CPU上运行,而S指的是一个进程处于睡眠可中断状态,它的进程控制块是被放在对应时间的等待队列中的,其他的各个状态均同理,至此,我想这个问题的答案已经不言而喻了。
问题三:关于tty的一些问题与解释请见我的博文tty浅析。
问题四:上个小节的一些实验结果:
第一种错误:
父进程未对子进程回收即wait()||waitpid()导致子进程先变成僵尸进程,紧接着父进程立刻退出,子进程由僵尸进程变成孤儿进程有systemed回收
int main()
{
pid_t pid = fork();
while (!pid) {
exit(1);
}
//int a;
//wait(&a);
return 0;
}
第二种错误:
子进程退出,父进程没有回收且没有退出,导致子进程变成僵尸进程,僵尸进程的危害请详见我的其他博客。
int main()
{
pid_t pid = fork();
while (!pid) {
exit(1);
}
sleep(1000);
//int a;
//wait(&a);
return 0;
}
可以看出,僵尸进程没有办法通过kill来杀死,只能使得父进程退出或者结束,使其变成孤儿进程再由systemed回收。
正确的操作:
int main()
{
pid_t pid = fork();
while (!pid) {
exit(1);
}
int a;
wait(&a);
return 0;
}