linux 后台运行strace

3xiyfsfu  于 2023-06-21  发布在  Linux
关注(0)|答案(2)|浏览(129)

我想让斯特雷斯做背景。比如说我在跑步

strace -esetsid setsid sleep 123

但是我想继续运行其他东西直到setsid返回。显然,简单地将&附加到

sleep 123

被解释为要跟踪的命令的一部分。那么,我如何在后台运行这个呢?
我使用strace只是为了获取由setsid启动的新会话的pid。如果有比strace更好的方法,我也想知道:)
谢谢

wi3ka0sx

wi3ka0sx1#

试试这个:

setsid -w sleep 123 &
ppid=$! # get the pid of the setsid command that we just launched
pid=`ps --ppid $ppid --no-headers | awk '{ print $1 }'`

(with -w,setsid等待进程退出-并作为其父进程保持; ps --ppid N用于选择父进程是setsid进程的进程-应该只有一个-或者如果子进程在shell执行ps之前退出,则没有。请确保检查这一点- $pid将为空,然后)。

dtcbnfnu

dtcbnfnu2#

在后台运行一些东西然后附加到它的问题是,您可能已经丢失了一些信息。因此,我建议使用一个子shell,并将该子shell放在后台:

( strace -o mystrace.out -esetsid setsid sleep 123 ) &

注意,子shell不是一个单独的进程,您可以直接获得预期的行为:

$ ( strace -o mystrace.out -esetsid setsid sleep 123 ) &
[1] 21077
$ ps f
  PID TTY      STAT   TIME COMMAND
20524 pts/0    Ss     0:00 -bash
21077 pts/0    S      0:00  \_ strace -o mystrace.out -esetsid setsid sleep 123
21104 pts/0    R+     0:00  \_ ps f

相关问题