脚本执行时的进程名,为什么不是脚本名?而是一个-bash?

脚本执行时的进程名,为什么不是脚本名?而是一个-bash?

一、查看脚本是否在执行

通过查看脚本中的子进程,如调用系统的进程sleep。或调用一些程序的进程。来查看脚本是否在执行。

image

如我的脚本中包含循环启停程序,有sleep。这里我查询sleep可以看到他的父进程。

或筛选bash来查找,如何脚本没有进程名,默认会使用bash终端作为进程名来执行。

image

在调用的程序启动时,使用 pstree -p <pid>​来查看进程树状图结构。从下面我们可以看出 bash(3067729) 这个进程应该就是我们的脚本执行进程。

image

二、原因分析

在脚本文件的第一行使用一个shebang(例如 #!/bin/bash​),然后通过 ./script.sh​ 来执行时。正常在使用ps -ef 查询时会显示执行语句如下所示。但是这里显示的是-bash。所以可能是指定sh解释器出了问题。通过检查sh脚本第一行的shebang语句(#! /bin/bash​),发现符号为中文字符,导致指定解释器无效。系统默认使用当前打开的终端使用shell作为解释器执行。所以脚本作为了一个当前终端的子进程来运行,因此没有进程名。

image

执行shell脚本的方式1

查看进程相关信息的命令2


  1. 执行shell脚本的方式

    1. ./script.sh

    • 执行环境:这种方式会使用脚本文件第一行指定的解释器来运行脚本(通常是 #!/bin/bash​ 或 #!/bin/sh​)。
    • 当前Shell:脚本在当前Shell的子Shell中执行。
    • 权限要求:脚本文件需要有执行权限(使用 chmod +x script.sh​ 赋予)。
    • Job Control:脚本会继承当前Shell的环境变量,并且可以接收来自终端的信号(如Ctrl+C)。

    2. bash script.sh

    • 执行环境:明确指定使用 bash​ 解释器来运行脚本。
    • 当前Shell:脚本在当前Shell的子Shell中执行。
    • 权限要求:脚本不需要有执行权限。
    • Job Control:脚本同样继承当前Shell的环境变量,并且可以接收来自终端的信号。

    3. sh script.sh

    • 执行环境:使用 sh​ 解释器来运行脚本,这通常是 bash​ 的一个更简单的版本或者链接到其他shell。
    • 当前Shell:脚本在当前Shell的子Shell中执行。
    • 权限要求:脚本不需要有执行权限。
    • Job Control:脚本继承当前Shell的环境变量,并且可以接收来自终端的信号。

    4. nohup ./script.sh &

    • 执行环境:使用 nohup​ 命令来运行脚本,这允许脚本在后台运行,即使关闭了终端。
    • 当前Shell:脚本在当前Shell的子Shell中执行,但不受终端关闭的影响。
    • 权限要求:脚本需要有执行权限。
    • Job Control:脚本会忽略挂断信号(SIGHUP),通常用于长时间运行的任务,输出会被重定向到 nohup.out​ 文件。

    5. setsid ./script.sh

    • 执行环境:使用 setsid​ 命令来运行脚本,这会创建一个新会话,使脚本不成为当前Shell的子进程。
    • 当前Shell:脚本在新会话中执行,与当前终端会话无关。
    • 权限要求:脚本需要有执行权限。
    • Job Control:脚本不会受到来自终端的信号影响,适用于那些需要独立于终端运行的进程。

    总的来说,这些方法在执行脚本时提供了不同的控制级别和环境隔离。选择哪种方法取决于你想要如何运行脚本以及脚本执行的具体需求。

  2. 查看进程相关信息的命令

    top -p

    查看实时的系统进程信息

    image

    cat /proc//status

    查看proc文件系统中关于进程的信息

    image

    cat /proc//cmdline

    查看启动该进程的完整命令行

    image

    ls -l /proc//cwd

    查看进程的工作目录 (通过这个命令也能知道pid 3067729就是我们的脚本进程)

    image

    strace -p

    跟踪进程执行时的系统调用和接收到的信号

    image

    lsof -p

    查看进程打开的文件

    image

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享