【Linux】进程管理

进程基础概念

进程的定义与特征

进程是操作系统资源分配的基本单位,具有以下核心特征:

  • 独立性:拥有独立的地址空间和系统资源

  • 动态性:具有创建、执行、终止的生命周期

  • 并发性:多个进程可以并发执行

  • 结构性:由代码段、数据段、堆栈等组成

进程 vs 线程

特性 进程 线程
资源开销 大(独立地址空间) 小(共享地址空间)
通信方式 IPC机制 共享内存
创建/销毁成本
安全性 高(隔离性好) 低(共享资源)

进程生命周期

  1. 创建:通过fork()系统调用

  2. 就绪:等待CPU调度

  3. 运行:正在CPU上执行

  4. 阻塞:等待I/O等事件

  5. 终止:正常结束或被终止

Linux进程管理机制

进程描述符(task_struct)

Linux内核通过task_struct结构体管理进程,包含:

  • 进程状态:运行、就绪、阻塞等

  • 进程ID:PID(唯一标识符)

  • 内存管理:mm_struct指针

  • 文件描述符表:打开的文件资源

  • 调度信息:优先级、策略等

进程调度策略

调度策略 描述 适用场景
CFS(完全公平) 基于虚拟运行时间的比例分配 普通进程
实时-FIFO 先到先服务,不可抢占 硬实时任务
实时-RR 时间片轮转 软实时任务
批处理 低优先级后台任务 非交互式任务

进程间通信(IPC)

  1. 管道(pipe)

    cmd1 | cmd2  # shell管道示例
  2. 信号(signal)

    kill -SIGTERM pid  # 发送终止信号
  3. 共享内存:最快IPC方式

  4. 消息队列:结构化数据传输

  5. 信号量:进程同步机制

进程操作命令

进程查看

ps aux           # 查看所有进程详细信息
top              # 动态查看进程资源占用
htop             # 增强版top(需安装)
pstree -p        # 树状显示进程关系

进程控制

kill -9 PID      # 强制终止进程
pkill -f "name"  # 按名称终止进程
nice -n 5 cmd    # 启动低优先级进程
renice 10 -p PID # 调整运行中进程优先级

后台进程管理

command &        # 后台运行
nohup command &  # 退出终端仍运行
jobs             # 查看后台作业
fg %1            # 将作业1调到前台
bg %2            # 继续运行暂停的作业2

进程编程接口

基础系统调用

#include 
#include 

pid_t fork(void);          // 创建子进程
int execve(const char *pathname, char *const argv[], 
          char *const envp[]); // 执行新程序
pid_t wait(int *wstatus);  // 等待子进程结束

进程创建示例

#include 
#include 

int main() {
    pid_t pid = fork();
    
    if (pid == 0) {
        // 子进程
        printf("Child PID: %d\n", getpid());
        sleep(2);
    } else if (pid > 0) {
        // 父进程
        printf("Parent PID: %d\n", getpid());
        wait(NULL);  // 等待子进程
        printf("Child finished\n");
    } else {
        perror("fork failed");
        return 1;
    }
    return 0;
}

信号处理示例

#include 
#include 

void handler(int sig) {
    printf("Received signal %d\n", sig);
}

int main() {
    signal(SIGINT, handler);  // 注册Ctrl+C处理函数
    while(1) {
        pause();  // 等待信号
    }
    return 0;
}

 总结

Linux进程是操作系统资源分配的基本单位,具有独立的地址空间和执行环境,通过fork()和exec()系统调用实现进程创建与程序加载。进程管理涉及调度策略(如CFS)、进程间通信(管道、信号、共享内存等)以及生命周期管理(创建、运行、终止)。开发中需掌握进程监控命令(ps/top)和编程接口(fork/wait/signal),同时注意处理僵尸进程和资源释放问题。理解Linux进程模型对构建稳定高效的应用至关重要,无论是系统服务还是并发程序,良好的进程管理都能显著提升系统可靠性和性能表现。

你可能感兴趣的:(Linux操作系统,linux,chrome,运维)