当前位置: 首页 > news >正文

linux进程三件套nohup、ps 和 kill 命令的详细解析

1. nohup 命令详解

nohup ./find_data_change_log_loop_in2m.sh > /dev/null 2>&1 &
  • nohup   
    •  :忽略挂断信号(SIGHUP),确保终端关闭后进程继续运行

  • > /dev/null
    • :将标准输出重定向到空设备(丢弃输出)

      • 本质
        • /dev/null 是 Linux/Unix 系统中的一个特殊设备文件,不是普通文件夹。

        • 它被称为 "黑洞设备" 或 "空设备",所有写入它的数据会被立即丢弃。

        • /dev/null 是 Linux 内核默认创建的设备节点,无需手动创建。

        • 位置固定为 /dev/null,不可更改或替换。

        • 通过 ls -l /dev/null 可查看其属性:

        • crw-rw-rw- 1 root root 1, 3 Jul 10 14:30 /dev/null
        • c 表示字符设备

        • 1, 3 是设备的主/次编号

        • 典型用途
          场景命令示例
          丢弃输出command > /dev/null
          静默运行nohup cmd > /dev/null 2>&1 &
          快速清空文件cat /dev/null > logfile
  • 2>&1:将标准错误(stderr)合并到标准输出(stdout)
    • 文件描述符(FD)

      描述符名称默认指向
      0stdin键盘输入
      1stdout终端屏幕
      2stderr终端屏幕

      符号含义

    • 2>:重定向 标准错误(stderr)

    • &1:表示 当前标准输出(stdout)的目标

    • 组合效果:将 stderr 合并到 stdout 的当前目标

    • 工作流程示例
      • # 原始命令(错误和输出分开显示)
        command 1>output.log 2>error.log
        
        # 合并错误到输出
        command > combined.log 2>&1
        # 等效逻辑:
        # 1. 先设置 stdout 到 combined.log
        # 2. 再将 stderr 指向 stdout 的当前目标(即 combined.log)
    • 常见变体

      命令效果
      2>file仅错误输出到文件
      >& file所有输出到文件(bash简写)
      2>/dev/null仅丢弃错误
    • &:将进程放到后台运行
      • 后台运行符 (&)
        command & # 将命令放到后台执行
      • 会返回作业号(如 [1] 12345

      • 使用 jobs 查看后台任务

      • echo $((5 & 3))  # 输出1(二进制与运算)
        文件描述符引用 (&1&2)
        command >file 2>&1  # 错误重定向到输出
        逻辑与符 (&&)
        cmd1 && cmd2  # 只有cmd1成功才执行cmd2
        位与操作符 (&)
        echo $((5 & 3))  # 输出1(二进制与运算)

关键特性

部分作用是否必需
nohup防止进程因终端退出被杀死是(需持久运行时)
> /dev/null丢弃输出否(生产环境建议保留日志)
2>&1错误输出合并否(调试时可分开记录)
&后台运行是(否则会阻塞终端)
典型场景
  • 需要长期运行的监控脚本

  • 远程SSH会话断开后仍需保持的进程

  • 避免输出污染当前终端

改进建议(生产环境)
# 保留日志并自动轮转 
nohup ./script.sh >> /var/log/script.log 2>&1 &

2. 进程状态查看 (ps aux | grep)

命令解析
ps aux | grep find_data_change_log_loop_in2m.sh
  • ps auxps = Process Status 显示所有用户的所有进程(源自 Unix 系统 V 的进程状态工具)

    • a:显示所有用户的进程

    • u:显示详细信息(CPU、内存等)

    • x:包括未控制终端的进程(如后台进程)

  • grep:过滤目标进程

输出列说明
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root     12345  0.5  1.2 345678 12345 ?        S    Jul10  10:30 ./find_data_change_log_loop_in2m.sh
  • STAT 状态码

    • S:睡眠(可中断)

    • R:运行中

    • T:暂停(如 Ctrl+Z)

    • Z:僵尸进程

    • D:不可中断的睡眠(通常为IO操作)

更专业的进程查找
# 精确匹配进程名(避免grep自身干扰)
pgrep -f find_data_change_log_loop_in2m.sh

# 查看进程树
pstree -p 12345

# 查看进程打开的文件
lsof -p 12345

3. kill 命令完全指南

基本语法
kill [信号] <PID>
常用信号
信号编号信号名作用场景
1SIGHUP挂起重新加载配置
2SIGINT中断(同Ctrl+C)优雅终止
9SIGKILL强制终止进程无响应时
15SIGTERM终止(默认)正常关闭
典型场景
  1. 正常停止进程

    kill -15 12345  # 发送SIGTERM
  2. 强制杀死无响应进程

    kill -9 12345   # 发送SIGKILL
  3. 批量停止相关进程

    pkill -f "pattern"  # 按名称匹配
    killall script.sh   # 按进程名
注意事项
  1. 信号传递顺序
    应先尝试 SIGTERM,等待5-10秒无效后再用 SIGKILL

  2. 僵尸进程处理
    若进程状态为 Z,需杀死其父进程:

    kill -9 $(ps -o ppid= -p <僵尸PID>)
  3. 权限限制

    • 普通用户只能杀死自己的进程

    • root用户可杀死任何进程

  4. 生产环境安全操作

4. 完整工作流示例

启动监控
nohup ./monitor.sh >> /var/log/monitor.log 2>&1 &
[1] 23456  # 返回进程ID
状态检查
ps -fp 23456
# 输出示例:
# UID        PID  PPID  C STIME TTY      TIME CMD
# root     23456     1  0 14:30 ?        00:00:01 ./monitor.sh
优雅停止
kill -15 23456
# 等待5秒后检查
if ps -p 23456 > /dev/null; then
    echo "进程未正常退出,强制终止..."
    kill -9 23456
fi
清理残留
# 查找所有残留进程
pkill -9 -f "monitor.sh"
# 删除日志(可选)
truncate -s 0 /var/log/monitor.log

5. 总结表格

操作命令关键参数风险等级
启动后台进程nohup cmd &> /dev/null 2>&1
查找进程ps aux | grep-f (全匹配)
正常停止kill -15-l (列出信号)
强制停止kill -9pkill (批量)
状态诊断ps -fp-o ppid (父进程)

相关文章:

  • 剑指Offer(数据结构与算法面试题精讲)C++版——day12
  • 算法——回溯
  • 【多模态大模型】《Qwen2.5-Omni》 论文解读
  • 弥合多层次差距:用于超声心动图中基于文本引导的标签高效分割的双向循环框架|文献速递-深度学习医疗AI最新文献
  • grafana/loki 部署搜集 k8s 集群日志
  • 电脑知识 | TCP通俗易懂详解 <一>
  • Java获取终端设备信息工具类
  • Day 8(下篇):总线驱动模型实战全解析 —— 以 PCA9450 PMIC 为例
  • 【机器学习】每日一讲-朴素贝叶斯公式
  • 超强大小白工具,应用广泛,PDF 删除,无需下载,在线使用,操作超简单,超实用
  • WMware虚拟机Ubuntu磁盘扩容
  • 突破性能瓶颈:Java微服务多任务管理的架构设计与实践
  • 可编辑33页PPT | 经营管理数字化转型平台解决方案
  • MySQL 优化方案大全
  • Acrel-1000DP分布式光伏监控系统在嘉兴亨泰新能源有限公司2996.37KWP分布式光伏项目中的应用
  • STL-函数对象
  • 程序员技能跃迁:职坐标精准赋能
  • 2.2goweb解析http请求信息
  • Colmap的安装和使用
  • Dockerfile部署springboot 项目或者springcloud项目
  • java网站这么做日志/百度账号注销
  • 梧州论坛手机红豆网/搜索引擎seo排名优化
  • 招聘网站开发/投广告的平台有哪些
  • 零基础学习网站建设/搜索引擎优化的含义
  • 做网站需要哪类商标/营销策略怎么写模板
  • 柳州专业网站推广公司/免费建站网站大全