当前位置:首页 > 电脑教程 > 正文

Linux如何停止sh脚本?

要关闭运行中的.sh脚本,在终端按Ctrl+C中断前台进程,若后台运行,先用ps找进程ID,再用kill [PID]终止。

在Linux系统中,关闭(终止)正在运行的 .sh 文件(Shell脚本)需要通过系统命令中断其进程,以下是详细操作步骤及方法:


理解进程终止原理

.sh 文件本身不是“服务”,而是通过Shell解释器(如/bin/bash)运行的脚本,关闭操作实际是终止其对应的进程,根据脚本运行状态选择不同方法:


终止前台运行的脚本

若脚本正在终端前台运行(例如通过 ./test.sh 启动):

  1. 快捷键终止
    按下 Ctrl + C 组合键,立即中断脚本。

    # 示例:运行后按 Ctrl+C
    $ ./test.sh
    ^C  # 脚本被强制终止
  2. 快捷键暂停
    若需临时暂停(非终止),按 Ctrl + Z 将脚本挂起到后台,再手动终止:

    Linux如何停止sh脚本?  第1张

    $ ./test.sh
    ^Z  # 暂停脚本,返回终端
    [1]+  Stopped        ./test.sh
    $ jobs -l         # 查看后台任务(显示进程ID)
    [1]+  12345 Stopped   ./test.sh
    $ kill -9 12345   # 强制终止该进程

终止后台运行的脚本

若脚本在后台启动(./test.sh &):

  1. 通过 jobs 查找任务ID

    $ jobs -l         # 列出后台任务及进程ID
    [1]-  23456 Running   ./test.sh &
  2. 终止指定任务

    $ kill %1         # 终止任务ID为1的后台任务
    # 或
    $ kill 23456      # 直接终止进程ID

通过进程名/ID全局终止

若脚本未在当前终端运行,或需精确终止:

  1. 查找进程ID(PID)
    使用 pspgrep 定位进程:

    $ ps aux | grep test.sh    # 过滤脚本进程
    # 输出示例:user  34567  0.0  0.1  12345  6780 pts/0  S    10:00  0:00 /bin/bash ./test.sh
    $ pgrep -f test.sh        # 直接获取PID
    34567
  2. 终止进程

    • 正常终止(允许资源清理):
      $ kill 34567      # 发送SIGTERM信号
    • 强制终止(立即结束,可能丢失数据):
      $ kill -9 34567   # 发送SIGKILL信号
  3. 按进程名批量终止

    $ pkill -f test.sh       # 终止所有匹配"test.sh"的进程
    # 或
    $ killall -9 test.sh     # 强制终止同名进程(需安装killall)

特殊情况处理

  1. 脚本卡死无响应
    优先用 kill -9 PID 强制终止,再检查脚本逻辑。

  2. 脚本产生子进程
    使用 pkill -P PID 终止子进程,或通过进程组终止:

    $ kill -- -PGID   # 注意负号表示进程组ID

注意事项

  1. 数据安全
    kill -9 是强制终止,可能导致未保存数据丢失,优先尝试 kill PID(默认SIGTERM)。
  2. 权限要求
    普通用户只能终止自己的进程,系统级脚本需 sudo 提权。
  3. 确认进程状态
    终止后执行 ps aux | grep test.sh 确认进程已退出。

总结步骤

  1. 定位脚本进程 → ps aux | grep 脚本名
  2. 根据运行状态选择方法 → 前台(Ctrl+C)、后台(jobs)、全局(pkill
  3. 发送终止信号 → kill [信号] PID
  4. 验证结果 → 再次检查进程列表

引用说明基于Linux内核标准进程管理机制,参考《Linux命令行与Shell脚本编程大全》及GNU Coreutils文档,操作命令兼容主流Linux发行版(Ubuntu/CentOS/Debian等)。

0