我是靠谱客的博主 迷路可乐,最近开发中收集的这篇文章主要介绍进程的分类,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在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());
    }
}






最后

以上就是迷路可乐为你收集整理的进程的分类的全部内容,希望文章能够帮你解决进程的分类所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(33)

评论列表共有 0 条评论

立即
投稿
返回
顶部