繁体   English   中英

linux bash-PS UAX-看不到正在运行的脚本?

[英]linux bash - ps uax - can not see running script?

这是非常非常奇怪,我无法弄清楚这应该是简单的事情:

  1. 以非root用户身份登录

  2. 创建一个脚本

user@debian:~$ vim loop.sh

    while true; do
    echo "Yeah!";
    sleep 1;
    done;

    chmod u+x loop.sh; # mark it runnable
    ./loop.sh; # run the script

    Yeah!
    Yeah!
    Yeah!
    ...
  1. 在其他终端上以root用户身份登录

ps uax|grep loop -> no result - is this script "invisible" even to root?

 tested on: uname -a Linux debian 3.16.0-4-686-pae #1 SMP Debian 3.16.39-1+deb8u2 (2017-03-07) i686 GNU/Linux vim loop.sh #!/bin/bash <- added this line while true; do echo "Yeah!"; sleep 1; done; ps uax|grep loop user 1282 0.0 0.2 5084 2736 pts/0 S+ 14:30 0:00 /bin/bash ./loop.sh <- now i can see it 

...如果这并不神秘-似乎有点奇怪-甚至可能会对安全产生影响? :-D root无法看到登录用户正在运行哪些脚本?

或者我在这里想念什么...

感谢您调查。

您的tty生成了一个新的进程来运行bash脚本。 另外,由于它包含sleep命令,因此会为每个sleep命令生成一个新的子进程。

while true do
echo "Yeah!"
echo $$  #Prints pid of running script
sleep 1
done

一旦从此脚本输出中获得PID值。 您可以对它执行grep操作,然后运行该进程。

脚本响应

 Yeah! 54126 Yeah! 54126 Yeah! 

ps -eaf | grep 54126

 503 54126 21882 0 6:10PM ttys000 0:00.07 -bash 503 54278 54126 0 6:11PM ttys000 0:00.00 sleep 1 503 54294 425 0 6:11PM ttys001 0:00.00 grep 54126 

如果没有shebang,则当前shell将打开脚本并解释内容,因此,在OS级别上的进程信息不具有脚本名称,就像命令被称为bash ./loop.sh

要从打开的文件脚本文件名中检索pid:

fuser ./loop.sh

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM