脚本执行时的进程名,为什么不是脚本名?而是一个-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脚本的方式

查看进程相关信息的命令

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