IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Linux 多进程编程 -> 正文阅读

[系统运维]Linux 多进程编程

进程简介

进程是系统进行资源分配和调度的基本单位,是操作系统结构的基础。
注意:创建一个进程时,同一个程序会从进程创建的位置执行两次。

相关api
pid_t fork() //#include <unistd.h> 创建进程
void exit(int status)     //#include <stdlib.h> 退出进程,退出时会调用atexit注册的函数,先注册的后调用,exit函数还会按需调用fclose函数关闭打开的文件流
int atexit(void(*func)(void)) //#include <stdlib.h> 为进程注册退出时调用的函数
void _exit(int status)    //#include <unistd.h> 直接退出进程

1. 进程实现

相关代码实现如下:

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

int main1()
{
    pid_t pid;

    printf("create pid\n");
    pid = fork();
    if(pid < 0)
    {
        printf("create pid error\n");
    }
    else if(pid==0)
    {
        printf("this is a son progress\n");
        printf("current pid: %d, the father pid:%d\n", getpid(), getppid());
    }
    else
    {
        printf("this is a father progress\n");
        printf("current pid: %d, the father pid:%d\n", getpid(), getppid());
    }
    
    printf("main fun exit \n");

    return 0;
}

执行结果如下:
在这里插入图片描述

2. 孤儿进程和僵尸进程

孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。
补充:
特殊的孤儿进程-------守护进程,一个守护进程的父进程是init进程,因为它真正的父进程在fork出子进程后就先于子进程exit退出了,所以它是一个由init继承的孤儿进程。守护进程是非交互式程序,没有控制终端,所以任何输出,无论是向标准输出设备stdout还是标准出错设备stderr的输出都需要特殊处理。
守护进程的名称通常以d结尾,比如sshd、xinetd、crond等

僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。

僵尸进程是指进程终止,父进程尚未回收,子进程残留资源PCB存放于内核kernel中变为僵尸zombie进程。父进程有义务将子进程回收,如果子进程死亡后父进程不帮子进程收尸,此时子进程就会变成僵尸。

如何查找僵尸进程的方式:

$ ps -ef | grep defunct
$ ps aux | grep Z
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-01-29 23:28:17  更:2022-01-29 23:30:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 7:28:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码