Linux进程控制详解

B站影视 内地电影 2025-04-05 22:05 1

摘要:Ø 每个进程有唯一的PID(进程ID),PPID(父进程ID)。

以下是关于Linux进程控制的详细讲解,涵盖关键概念、常用命令及操作示例:

一、进程基础概念

进程定义

Ø 程序的一次执行实例,拥有独立的内存空间和系统资源。

Ø 每个进程有唯一的PID(进程ID),PPID(父进程ID)。

进程状态

Ø R (Running):运行/就绪

Ø S (Sleeping):可中断睡眠

Ø D (Uninterruptible Sleep):不可中断睡眠(通常等待I/O)

Ø Z (Zombie):僵尸进程(已终止但未回收)

Ø T (Stopped):暂停状态(如收到SIGSTOP)

二、进程控制命令

1. 查看进程

bash

ps aux # 查看所有进程详细信息

ps -ef # 全格式列表(含PPID)

top # 动态监控(按P按CPU排序,M按内存排序)

pstree -p # 树形显示进程关系

2. 终止进程

bash

kill -9 PID # 强制终止进程(SIGKILL)

killall httpd # 终止所有名为httpd的进程

pkill -u username # 终止对应用户的所有进程

3. 后台/前台控制

bash

command & # 后台运行

Ctrl + Z # 暂停当前进程并放入后台

jobs # 查看后台作业列表

fg %1 # 将作业1调到前台

bg %2 # 在后台继续运行作业2

nohup command & # 退出终端后仍运行(输出到nohup.out)

三、进程创建与管理(C编程)

1. fork 创建子进程

c

#include

pid_t pid = fork;

if (pid == 0) {

// 子进程代码

} else if (pid > 0) {

// 父进程代码

} else {

// fork失败

}

2. exec 系列函数

c

execl("/bin/ls", "ls", "-l", NULL); // 替换当前进程映像

3. 等待子进程退出

c

wait(NULL); // 阻塞等待任意子进程

waitpid(pid, &status, WNOHANG); // 非阻塞等待特定子进程

四、信号处理

常用信号

SIGINT (2) : Ctrl+C 中断SIGTERM (15) : 默认终止信号SIGKILL (9) : 强制终止(不可捕获)SIGSTOP (19) : 暂停进程(不可捕获)

自定义信号处理

c

#include

void handler(int sig) {

// 处理逻辑

}

signal(SIGINT, handler); // 捕获SIGINT

五、进程优先级与调度

bash

nice -n 10 command # 启动时设置优先级(-20到19,值越大优先级越低)

renice 5 -p PID # 修改运行中进程的优先级

chrt --pid 99 PID # 设置实时调度策略(需root)

六、守护进程(Daemon)

创建步骤:

调用fork创建子进程,父进程退出子进程调用setsid创建新会话关闭文件描述符(如STDIN/STDOUT/STDERR)改变工作目录到根目录 (chdir("/"))重设文件创建掩码 (umask(0))

七、进程间通信(IPC)

管道(Pipe)

bash

ls | grep .txt # 匿名管道

mkfifo mypipe # 命名管道

共享内存

Ø shmget, shmat, shmdt

消息队列

Ø msgget, msgsnd, msgrcv

信号量

Ø semget, semop

八、高级工具

strace:跟踪系统调用

bash

strace -p PID # 追踪运行中进程

cgroups:资源限制

bash

cgcreate -g cpu,memory:mygroup

cgexec -g cpu,memory:mygroup command

掌握这些内容后,您将能够熟练进行Linux环境下的进程监控、资源管理和程序开发。建议结合实际操作加深理解!

来源:老客数据一点号

相关推荐