【问题标题】:How can I list all processes got executed during a shell-script(or sth. like that) running如何列出在 shell 脚本(或类似的东西)运行期间执行的所有进程
【发布时间】:2014-10-13 08:54:58
【问题描述】:

例如。当以下脚本被执行时:

#!/bin/sh
g++ -o foo foo.cpp 
sudo apt-get install ninja

有没有什么简洁的方式列出以下流程记录?

sh
g++
cpp
cplusplus
gas
ld
sudo
perl

【问题讨论】:

  • 干净吗:strace -o executed.txt -e execve -f sh your-sctrip.sh ?

标签: linux process system-administration


【解决方案1】:

您可以使用strace 来查找在您的脚本运行时执行的所有程序。像这样的:

strace -o executed.txt -e execve -f sh your-sctrip.sh 

这是一个例子。首先是我的 bash 脚本:

$ cat build.sh
#!/bin/sh
g++ main.cpp
ls

然后扫一扫:

$ strace 2>&1 -e execve -f bash build.sh \
   | sed -n -r "s/.* execve\(\"([^,\"]+)\".* = 0$/\1/p"
/usr/local/CC/gcc-4.3.3/bin/g++
/usr/local/CC/gcc-4.3.3/libexec/gcc/x86_64-unknown-linux-gnu/4.3.3/cc1plus
/usr/bin/as
/usr/local/CC/gcc-4.3.3/libexec/gcc/x86_64-unknown-linux-gnu/4.3.3/collect2
/usr/bin/ld
/bin/ls

或者,如果您只需要文件名,请添加 xargs -n 1 basename:

$ strace 2>&1 -e execve -f bash build.sh \
    | sed -n -r "s/.* execve\(\"([^,\"]+)\".* = 0$/\1/p" \
    | xargs -n 1 basename
g++
cc1plus
as
collect2
ld
ls

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-29
    • 2018-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多