概述
在Linux系统中,根据进程的特点,把进程可以分为三类:交互进程、批处理进程和守护进程。
1. 交互进程:是由shell启动的进程,它既可以在前台运行,也可以在后台运行。交互进程在执行过程中,要求与用户进行交互操作。简单来说就是用户需要给出某些参数或者信息,进程才能继续执行。
2.批处理进程:与windows原来的批处理很类似,是一个进程序列。该进程负责按照顺序启动其它进程。
3.守护进程:是是执行特定功能或者执行系统相关任务的后台进程。守护进程只是一个特殊的进程,不是内核的组成部分。许多守护进程在系统启动时启动,直到系统关闭时才停止运行。而某些守护进程只是在需要时才会启动,比如FTP或者Apache服务等,可以在需要的时候才启动该服务。
另外,根据进程状态的不同,又可以把进程分为另外三类:守护进程、孤儿进程和僵尸进程。
1.守护进程:(补充):所有守护进程都可以超级用户(用户ID为0)的优先权运行;守护进程没有控制终端;守护进程的父进程都是init进程(即1号进程)。
但是,并非所有在后台运行的进程都是守护进程,因为我们可以使用符号“&”来使进程在后台运行。比如:./bin/process_test &,执行该条命令后,相应的进程在后台运行。
2.孤儿进程:一个父进程退出后,它的一个或多个子进程还在运行,那么这些子进程将成为孤儿进程。孤儿进程将被init进程所收养,并由init进程对它们完成状态收集工作。
3.僵尸进程:一个子进程结束但是没有完全释放内存(在内核中的 task_struct没有释放),该进程就成为僵尸进程。
当僵尸进程的父进程结束后该僵尸进程就会被init进程所收养,最终被回收。
僵尸进程会导致资源的浪费,而孤儿进程不会。
-------------------------------------------------------------
子进程成为孤儿进程
...
main(void)
{
pid_t pid;
pid = fork();
if(pid < 0)
{
perror("fork errorn");
exit(1);
}
else if(pid > 0)
{
// parent process
printf("parent process deadn");
exit(0);
}
else
{
// child process
sleep(3)
printf("I'm an orphenn");
printf("pid: %d, ppid: %dn", getpid(), getppid());
}
}
---------------------------------------------------
子进程成为僵尸进程
...
main(void)
{
pid_t pid;
pid = fork();
if(pid < 0)
{
perror("fork errorn");
exit(1);
}
else if(pid == 0)
{
// child process
printf("I'm a zombie processn");
printf("pid: %d, ppid: %dn", getpid(), getppid());
exit(0);
}
else
{
// parent process
printf("pid: %d, ppid: %dn", getpid(), getppid());
}
}
最后
以上就是迷路可乐为你收集整理的进程的分类的全部内容,希望文章能够帮你解决进程的分类所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复