在旧的SystemV Unix上使用“桁架”程序(类似于strace)
truss script.sh
.....
fork() = 382
6
Received signal #18, SIGCLD, in waitsys() [default]
siginfo: SIGCLD CLD_EXITED pid=382 uid=0 status=0x0000
.....在长输出中,我可以看到叉() syscall。我希望看到在Linux上使用strace的相同情况(或类似的情况)。
我试过了
strace -e fork sh script.sh和
strace -f sh script.sh和
strace -f -e fork sh script.sh但我看不到叉子()。Linux和SystemV当然是不同的操作系统,而且Unix可能以与Linux不同的方式使用fork(),但问题是:如何使用strace来查看fork()输出?当然,在这两个系统中,script.sh都包含相同的命令“ls\wc -l”,我只将它用于测试。
发布于 2020-05-11 01:09:07
当前版本的Linux提供了一个名为clone(2)的系统调用(参见https://linux.die.net/man/2/clone并向下滚动到sys_clone的描述),这是一个用于创建新任务的通用系统调用。有一些选项可以确切地确定新任务应该与父任务共享哪些资源(内存、文件描述符等),以便系统调用可以用于创建新进程或新线程或其间的任何内容。尽管内核仍然提供了一个fork系统要求向后兼容,但是当前版本的glibc以clone(2)代替实现了fork()。
因此,即使在fork()的源代码中可以看到对sh的调用,但strace的输出将显示一个clone系统调用。因此,您应该寻找它,而不是fork。
https://stackoverflow.com/questions/61719362
复制相似问题