首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >斯特拉斯,怎么看分叉系统电话?

斯特拉斯,怎么看分叉系统电话?
EN

Stack Overflow用户
提问于 2020-05-10 22:08:07
回答 1查看 1.1K关注 0票数 0

在旧的SystemV Unix上使用“桁架”程序(类似于strace)

代码语言:javascript
复制
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的相同情况(或类似的情况)。

我试过了

代码语言:javascript
复制
strace -e fork sh script.sh

代码语言:javascript
复制
strace -f sh script.sh

代码语言:javascript
复制
strace -f -e fork sh script.sh

但我看不到叉子()。Linux和SystemV当然是不同的操作系统,而且Unix可能以与Linux不同的方式使用fork(),但问题是:如何使用strace来查看fork()输出?当然,在这两个系统中,script.sh都包含相同的命令“ls\wc -l”,我只将它用于测试。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61719362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档