您好,登录后才能下订单哦!
# 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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。