# Linux进程及作业管理的方法是什么 ## 一、Linux进程基础概念 ### 1.1 进程的定义与特点 进程(Process)是Linux系统中正在执行的程序的实例,具有以下核心特征: - **独立性**:每个进程拥有独立的地址空间、数据栈和寄存器组 - **动态性**:进程具有创建、运行、暂停、终止等生命周期 - **并发性**:多个进程可在单核CPU上通过时间片轮转实现并发执行 - **资源分配单元**:系统以进程为单位分配CPU、内存等资源 ### 1.2 进程与线程的区别 | 特性 | 进程 | 线程 | |-------------|-----------------------|-----------------------| | 资源占用 | 独立内存空间 | 共享进程内存 | | 创建开销 | 较大(需复制父进程) | 较小 | | 通信方式 | IPC机制 | 共享变量 | | 崩溃影响 | 不影响其他进程 | 导致整个进程终止 | ### 1.3 进程标识符 - **PID**(Process ID):唯一数字标识(1~32768) - **PPID**(Parent PID):父进程ID - **UID/GID**:运行进程的用户/组身份 ```bash # 查看当前shell进程信息 echo "PID: $$, PPID: $PPID"
# 显示所有用户完整格式进程 ps -aux # 树状显示进程关系 ps -ejH # 自定义输出列(示例显示CPU占用前5) ps -eo pid,ppid,cmd,%cpu --sort=-%cpu | head -n 6
常用操作键: - P
:按CPU排序 - M
:按内存排序 - k
:终止指定PID进程 - 1
:显示多核CPU详情 - h
:查看帮助信息
安装与特性:
sudo apt install htop # Debian系 sudo yum install htop # RHEL系
优势功能: - 彩色界面显示 - 鼠标支持操作 - 直观的CPU/内存图表 - 进程树状视图(F5键)
常用信号列表:
信号编号 | 名称 | 作用 |
---|---|---|
1 | SIGHUP | 重新加载配置 |
9 | SIGKILL | 强制终止 |
15 | SIGTERM | 优雅终止(默认) |
19 | SIGSTOP | 暂停进程 |
18 | SIGCONT | 继续执行暂停的进程 |
实践示例:
# 查找nginx进程 pgrep -l nginx # 优雅重启 sudo kill -HUP $(pgrep nginx) # 强制终止 sudo kill -9 1234
优先级范围:-20(最高)到19(最低)
# 启动低优先级任务 nice -n 10 tar -czf backup.tar.gz /data # 修改运行中进程优先级 renice -n 5 -p 2345
# 启动后台作业 python script.py & # 查看作业列表 jobs -l # 将后台作业调到前台 fg %1 # 暂停当前前台作业 Ctrl+Z # 继续后台执行 bg %2
# 终端退出后仍保持运行 nohup ./server.sh & # 已启动作业转为持久化 disown -h %1
配置文件示例:
# 编辑用户crontab crontab -e # 每天3点执行备份 0 3 * * * /home/user/backup.sh # 每10分钟检查服务 */10 * * * * /usr/bin/systemctl check-service
# 明天9点执行 echo "shutdown -h now" | at 09:00 tomorrow # 查看待执行任务 atq
操作 | systemctl命令 | 传统service命令 |
---|---|---|
启动服务 | systemctl start nginx | service nginx start |
设置自启 | systemctl enable nginx | chkconfig nginx on |
查看状态 | systemctl status nginx | service nginx status |
/etc/systemd/system/myapp.service
:
[Unit] Description=My Custom Application After=network.target [Service] ExecStart=/usr/local/bin/myapp WorkingDirectory=/var/lib/myapp User=appuser Restart=on-failure [Install] WantedBy=multi-user.target
# 查看最新日志 journalctl -xe # 按时间筛选 journalctl --since "2023-01-01" --until "2023-01-02" # 服务专用日志 journalctl -u nginx.service -f
管道(Pipe) “`bash
cat access.log | grep “404”
# 命名管道 mkfifo /tmp/my_pipe
2. **信号量**:通过`semget`/`semop`系统调用实现同步 3. **共享内存**:`shmget`创建共享内存段 4. **消息队列**:`msgget`创建消息队列 ### 5.2 套接字通信 本地域套接字示例: ```c // 服务器端创建 int sockfd = socket(AF_UNIX, SOCK_STREAM, 0); struct sockaddr_un addr = {.sun_family=AF_UNIX}; strcpy(addr.sun_path, "/tmp/mysocket"); bind(sockfd, (struct sockaddr*)&addr, sizeof(addr));
vmstat 1 5
关键指标: - r
:运行队列长度 - si/so
:交换区换入/出 - us/sy
:用户/系统CPU时间
# 监控进程的CPU、内存、IO pidstat -urd -p 1234 2 5
OOM处理:
# 调整OOM killer策略 echo -17 > /proc/1234/oom_adj
文件描述符限制:
ulimit -n 65535
调度策略设置:
chrt -f -p 1 1234 # 将PID1234设为FIFO调度
# 创建内存限制组 cgcreate -g memory:mygroup echo "100M" > /sys/fs/cgroup/memory/mygroup/memory.limit_in_bytes # 将进程加入控制组 cgclassify -g memory:mygroup 1234
nsenter -t 1234 -p -m # 进入容器的命名空间
掌握Linux进程管理需要理解操作系统原理与实践经验的结合。建议通过以下步骤深化学习: 1. 使用strace
跟踪系统调用 2. 分析/proc/PID
目录下的进程信息 3. 编写简单的多进程程序实践IPC 4. 定期审查系统进程日志(/var/log/)
本文涉及的命令在不同Linux发行版中可能存在参数差异,建议通过
man [command]
查阅本地手册获取准确信息。 “`
注:本文实际约2850字,采用Markdown格式编写,包含代码块、表格、多级标题等元素,可直接用于技术文档发布。内容覆盖了从基础概念到高级调优的完整知识体系,并特别增加了容器环境下的进程管理说明。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。