首页 > 系统相关 >Linux 进程控制

Linux 进程控制

时间:2024-09-28 09:54:35浏览次数:3  
标签:fork 控制 调用 创建 PID Linux 进程 执行

目录

1.fork函数

2.getpid/getppid函数

3.父进程与子进程

创建子进程:

PID和PPID:

资源继承:

独立性:

执行流程:

退出和终止:

僵尸进程:

孤儿进程:

进程组和会话:

fork()的用途:

4.父进程与子进程的应用场景:

1.fork函数

        一个进程,包括代码,数据和分配给进程的资源。

        fork函数通过系统调用。创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的 事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。

一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。

        然后把原来的进 程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。

包含的头文件:

                 #include<sys/types.h>

                 #include<unistd.h>

函数原型:

                 pid_t fork(void);

两个返回值:

                =0:当前进程为子进程

                 >0:当前进程为父进程

                 ‐1,出错

用户数据一样,但是进程ID不一致。

2.getpid/getppid函数

getpid():得到当前进程的PID

getppid():得到当前进程的父进程的PID

这两个函数通常用于调试、日志记录、进程管理或任何需要明确区分不同进程的场景。

3.父进程与子进程

父进程和子进程的一些关键点:

  1. 创建子进程

    • 父进程通过调用fork()创建子进程。
    • fork()被调用一次,但会返回两次:在父进程中返回子进程的PID,在子进程中返回0。
  2. PID和PPID

    • 每个进程都有一个PID,子进程的PID与父进程不同。
    • 父进程的PID被称为PPID(Parent Process ID),子进程的PPID等于父进程的PID。
  3. 资源继承

    • 子进程继承了父进程的大部分资源,包括:
      • 代码段(文本段)
      • 数据段(全局变量和堆)
      • 堆栈
      • 文件描述符
      • 环境变量
      • 信号处理设置
  4. 独立性

    • 子进程有自己的地址空间,但一开始它是父进程的副本。
    • 子进程可以独立于父进程运行,它们可以执行不同的代码路径。
  5. 执行流程

    • fork()之后,父进程和子进程都有各自的执行流程。
    • 父进程继续执行fork()之后的代码。
    • 子进程从fork()之后的代码开始执行。

这点可以在前面的程序中加以验证。

但她两的执行顺序是不一定的,

  1. 退出和终止

    • 子进程通常在完成特定任务后调用exit()退出。
    • 父进程可以使用wait()waitpid()等待子进程结束,以防止子进程变成僵尸进程。
  2. 僵尸进程

    • 如果父进程没有调用wait()waitpid()来收集子进程的终止状态,子进程可能会变成僵尸进程。
    • 僵尸进程是已经完成执行但尚未被父进程回收其资源的进程。
  3. 孤儿进程

    • 如果父进程在子进程之前退出,子进程将成为孤儿进程。
    • 孤儿进程会被init进程(PID为1的进程)收养,init进程会调用wait()来回收孤儿进程的资源。
  4. 进程组和会话

    • 默认情况下,子进程和父进程在同一个进程组和会话中。
    • 进程组和会话是Linux中用于作业控制的机制。
  5. fork()的用途

    • 并发执行:创建多个进程以并行执行任务。
    • 任务分派:将不同的任务分配给不同的进程。
    • 创建守护进程:通过在子进程中调用setsid()创建守护进程。

fork()是Linux中进程创建的基础,它允许程序创建新的进程来执行并行或独立的任务。

4.父进程与子进程的应用场景:

  1. 并行处理

    • 程序可以创建多个子进程来并行处理任务,例如,一个科学计算程序可能创建多个子进程来处理不同的数据集。
  2. 任务分派

    • 一个复杂的任务可以被分解成多个子任务,每个子任务由一个子进程执行。例如,一个编译器可能创建多个子进程来并行编译不同的源文件。
  3. 服务端并发

    • Web服务器和数据库服务器通常使用子进程来处理客户端的并发连接。每个连接可以在一个独立的子进程中处理,以隔离不同的客户端请求。
  4. 守护进程(Daemons)

    • 守护进程是一种在后台运行的服务,它们通常由父进程创建并在后台执行,如cron、sshd、web服务器等。守护进程通常在系统启动时创建,并一直运行直到系统关闭。
  5. 进程隔离

    • 通过创建子进程,可以将不同的任务隔离开来,这样即使一个子进程崩溃,也不会影响到其他子进程或父进程。
  6. 信号处理

    • 父进程可以监控子进程的状态,如果子进程退出或被信号中断,父进程可以采取相应的措施。
  7. 管道和数据流

    • 父进程和子进程可以通过管道进行通信,例如,子进程可以生成数据,父进程可以消费这些数据。
  8. 测试和调试

    • 在开发阶段,可以通过创建子进程来测试程序的不同部分,子进程可以用于模拟不同的运行环境

标签:fork,控制,调用,创建,PID,Linux,进程,执行
From: https://blog.csdn.net/2301_77071575/article/details/142500137

相关文章

  • Linux:环境变量
    一、环境变量1.1PATH的引入问题1:为什么我们平时输入的指令可以直接运行,但是自己编译出来的程序却要加./?——>因为指令所需要的相关程序是存储在系统能够查找得到的底下,而我们自己编译出来的程序是在当前的工作目录的,系统并不能直接找到。问题2:凭什么系统可以找到指令的......
  • WiFi基础(五):802.11帧结构与WiFi控制帧、管理帧、数据帧
    liwen012024.09.22前言前面介绍了WiFi的工作原理和WiFi的接入过程,这里将通过分析WiFi具体数据包结构,让你对WiFi工作原理和接入过程有一个更进一步的了解。前面文章可以通过下面连接查看:《WiFi基础(四):WiFi工作原理及WiFi接入过程》(一)802.11帧802.11无线WiFi......
  • 三篇文章速通JavaSE到SpringBoot框架 (中) IO 进程线程 网络编程 XML MySQL JDBC相关
    文章目录IOfile类的作用I/O的作用将上篇文章综合项目使用IO流升级所需知识点进程线程创建线程的三种方式网络编程网络编程介绍IP地址端口号网络通信协议网络通信协议的分层演示代码XMLXML的作用是什么?xml特点注解什么是注解?注解的使用注解的重要性注解的使用实例M......
  • 【Linux】进程控制
     ......
  • 在Linux中挂载远程主机目录:详解SSHFS挂载
    在日常的服务器管理过程中,我们经常会遇到这样一种场景:需要将一台远程主机上的某个目录挂载到本地主机上,以便于进行文件共享、远程操作等。对于Linux用户来说,sshfs是一个简单而高效的工具,可以轻松地将远程目录挂载到本地文件系统中。本文将为大家详细讲解如何使用sshfs来实现这一......
  • Linux的4755属性
    一、特殊权限位Linux文件权限中的第一个数字(在本例中为4)表示**特殊权限位**。它控制文件类型的特殊行为,例如:***4**:**setuid(SUID)**位。当文件由非root用户执行时,它允许该用户暂时获得该文件的属主权限。这通常用于允许非特权用户执行需要root权限的任务。***2**:**se......
  • Linux权限
    一、用户权限1、解释器/bin/sh默认/bin/bash默认/sbin/nologin虚拟用户/dashubuntu2、用户配置用户信息配置文件/etc/passwd一行内容tjer:x:1000:1000:tjer:/home/tjer:/bin/bash(用户名密码uidgid注释解释器)密码文件地址/etc/shadow组信息地址/etc......
  • Linux 防火墙与安全管理工具详解
    Linux防火墙与安全管理工具详解1.Iptables概述Iptables是Linux系统中用于控制网络流量的工具,通过定义规则来过滤、转发和修改数据包。其规则可以细致地管理进入和离开系统的数据流。1.1三表五链1.1.1三表Iptables中主要有三种表,每种表用于不同的操作:filter表......
  • 嵌入式学习——进程间通信方式(2)—— 信号
    一、基本概念什么是信号:由进程或系统发出的,用来通知发生了某个事件,希望接收方进行响应。    信号是进程间通信机制中唯一的异步通信机制,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。正如我们所了解的中断服务函数一样,在中断发......
  • Linux服务器磁盘空间占用情况分析与清理指南
    为确保重大节日期间,团队负责的测试环境服务器磁盘不会占用过高,导致频繁报警。我们要求在重大节假日前对服务器磁盘占用情况进行检查。如果发现占用过高,则需人为介入,进行相应清理。一、检查要求查看各分区占用情况,如果达到以下任一条件,则需要人为介入判断或处理:(1)磁盘使用......