# 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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。