【问题标题】:How to find the commands executed by a /bin/bash process? (Linux)如何找到 /bin/bash 进程执行的命令? (Linux)
【发布时间】:2018-09-15 07:21:51
【问题描述】:

TL;DR : 我想让命令在 /bin/bash 进程中运行(如果正在运行)。

我想要一个可以在 /bin/bash 进程中识别命令 /bin/bash 正在运行的脚本。试图在 /proc/[pid]/cmdline 中找到它,但它只显示 /bin/bash。

有没有办法做到这一点,或者我想知道的是不可能的。 :o

我问是因为当我运行ps -ef 时,一些进程(如 ssh)显示它们是如何运行的。

user      30410 30409  0 10:58 pts/0    00:00:00 ssh name@127.0.0.1  <-- here

ssh 命令完全打印出来了。

如果我执行命令ps -ef | grep "/bin/bash",我们可以看到相同的结果,它返回:

user     20080  4999  0 13:40 pts/9    00:00:00 grep /bin/bash  <-- here

打印了 grep /bin/bash 命令。

但是,如果我运行像 while true; do echo "hello"; done 这样的 bash 循环 然后我做ps -ef | grep "while" 它什么也没返回!!!

【问题讨论】:

    标签: linux process monitoring proc


    【解决方案1】:

    这取决于您要查找的命令类型。

    对于从 shell 运行的外部命令,“ps -efH”会向您显示正在运行的进程的分层列表,然后您可以找到所需的信息。

    bash 内置命令不会显示在 ps 列表中,您必须使用“set -x”启用脚本调试,然后监视 stderr 以查看脚本在做什么。

    回答您所做的编辑: while 是内置的,所以它不会出现。但是“回声”会出现在我上面提到的“ps -efH”输出中。

    【讨论】:

    • 我想找到一种方法来监控进程弹出,尤其是正在运行的命令。我希望我的小 inotify bash 脚本将某些命令列入黑名单并在不允许时将其杀死。是否可以通过 inotify 监视 /proc 并在不允许的情况下触发杀死?
    • 所以你想找出消耗过多cpu的逃跑或流氓脚本......这是一个不同的问题。
    • 是的,这是我的最终目标。如果我找到解决方案或发现我不需要它,将关闭它。将为此主题创建一个新主题。
    • @redcore。查找高 CPU 进程的最简单工具是 top(或 htop)。这为您提供了进程 ID 和一些有关违规命令的信息。根据您在 [h]top 中找到的内容,有许多技术可以进一步深入研究。一个提示:当你找到一个高 CPU proc 时,获取那个 pid,然后用 /bin/ls -l /proc/$ProblemPIDNum 探索。祝你好运。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-02
    • 1970-01-01
    相关资源
    最近更新 更多