【Linux】Linux中的进程管理与调度

在Linux操作系统中,进程管理和调度是操作系统内核的重要组成部分。它们确保系统资源被有效利用,并且多个任务可以并发执行。本文将详细介绍Linux中的进程管理与调度机制,并提供一些实用的示例代码。


🧑 博主简介:现任阿里巴巴嵌入式技术专家,15年工作经验,深耕嵌入式+人工智能领域,精通嵌入式领域开发、技术管理、简历招聘面试。CSDN优质创作者,提供产品测评、学习辅导、简历面试辅导、毕设辅导、项目开发、C/C++/Java/Python/Linux/AI等方面的服务,如有需要请站内私信或者联系任意文章底部的的VX名片(ID:gylzbk

💬 博主粉丝群介绍:① 群内初中生、高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。③ 群内也有职场精英,大厂大佬,可交流技术、面试、找工作的经验。④ 进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬。⑤ 进群赠送CSDN评论防封脚本,送真活跃粉丝,助你提升文章热度。有兴趣的加文末联系方式,备注自己的CSDN昵称,拉你进群,互相学习共同进步。

在这里插入图片描述

在这里插入图片描述

一、进程管理

1.1 进程的基本概念

进程是一个正在执行的程序实例,包括程序代码、数据、堆栈和处理器状态等。每个进程都有一个唯一的进程ID(PID)。Linux系统中的进程管理包括进程的创建、终止、状态转换、进程控制和进程间通信等。

1.2 进程的创建与终止

在Linux中,进程的创建主要通过forkexec系统调用完成。

1.2.1 fork系统调用

fork系统调用用于创建一个子进程,子进程是父进程的副本。以下是一个示例代码:

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

int main() {
    pid_t pid = fork();

    if (pid < 0) {
        perror("fork failed");
        return 1;
    } else if (pid == 0) {
        printf("This is the child process with PID: %d\n", getpid());
    } else {
        printf("This is the parent process with PID: %d\n", getpid());
    }

    return 0;
}

1.2.2 exec系统调用

exec系统调用用于在当前进程的上下文中执行一个新程序。以下是一个示例代码:

#include <stdio.h>
#include <unistd.h>

int main() {
    char *args[] = {"/bin/ls", "-l", NULL};
    execvp(args[0], args);

    // execvp成功执行后,下面的代码不会被执行
    perror("execvp failed");
    return 1;
}

1.3 进程状态

Linux中的进程有以下几种状态:

  • R(Running):进程正在运行或在运行队列中等待。
  • S(Sleeping):进程正在等待某个事件(可中断)。
  • D(Uninterruptible Sleep):进程正在等待I/O(不可中断)。
  • T(Stopped):进程已停止。
  • Z(Zombie):进程已终止,但其父进程尚未回收其资源。

1.4 进程控制

Linux提供了多种命令和工具用于进程控制,如pstopkill等。

1.4.1 查看进程

使用ps命令查看系统中的进程:

ps aux

使用top命令实时监控系统进程:

top

1.4.2 终止进程

使用kill命令终止进程:

kill <PID>

例如,终止PID为1234的进程:

kill 1234

二、进程调度

2.1 进程调度的基本概念

进程调度是操作系统内核根据特定的调度算法,将CPU时间分配给进程的过程。Linux内核使用完全公平调度器(CFS)来管理进程调度,确保每个进程公平地获得CPU时间。

2.2 调度策略

Linux内核支持多种调度策略,包括:

  • SCHED_NORMAL:普通时间共享进程。
  • SCHED_BATCH:适用于批处理作业,不需要交互响应。
  • SCHED_IDLE:用于非常低优先级的作业。
  • SCHED_FIFO:实时调度策略,先入先出。
  • SCHED_RR:实时调度策略,时间片轮转。

2.3 查看和设置调度策略

使用chrt命令可以查看和设置进程的调度策略。

2.3.1 查看调度策略

chrt -p <PID>

例如,查看PID为1234的进程的调度策略:

chrt -p 1234

2.3.2 设置调度策略

sudo chrt -r -p <优先级> <PID>

例如,将PID为1234的进程设置为实时调度策略SCHED_RR,优先级为10:

sudo chrt -r -p 10 1234

2.4 调整进程优先级

使用nicerenice命令可以调整进程的优先级。

2.4.1 启动进程时设置优先级

使用nice命令启动进程并设置优先级:

nice -n <优先级> <命令>

例如,以优先级10启动top命令:

nice -n 10 top

2.4.2 修改运行中进程的优先级

使用renice命令修改运行中进程的优先级:

renice <优先级> -p <PID>

例如,将PID为1234的进程的优先级设置为10:

renice 10 -p 1234

结论

通过本文的介绍和示例代码,我们可以看到如何在Linux系统中进行进程管理和调度。进程管理包括进程的创建、终止、状态转换和进程控制,而进程调度则确保系统资源被有效利用,多个任务可以并发执行。希望本文能为你在Linux系统中进行进程管理和调度提供一些有用的指导和参考。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

I'mAlex

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值