gpt4 book ai didi

linux - 什么可以使程序在 `strace` 内表现不同?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:15:05 25 4
gpt4 key购买 nike

这与 https://unix.stackexchange.com/q/485682/40697 有关但我决定采用更加面向开发人员的方法。

出于某种原因,当通过蓝牙串行控制台登录时,我无法在我的系统上安装软件包:

# dpkg -i /var/cache/apt/archives/openssh-server_1%3a7.4p1-10+deb9u4_armhf.deb 
dpkg: unrecoverable fatal error, aborting:
wait for subprocess dpkg-split failed: No child processes

我尝试使用 strace 来追溯问题。然而:

# strace -e trace=fork dpkg -i /var/cache/apt/archives/openssh-server_1%3a7.4p1-10+deb9u4_armhf.deb
[...]
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=7046, si_uid=0, si_status=0, si_utime=0, si_stime=1} ---
+++ exited with 0 +++

如您所见,在 strace 中运行时,进程以退出状态 0 完成(并且安装了包)。但是,当在 strace 之外工作时,dpkg 系统性地失败。

FWIW,当在 gdb 中运行时,进程也失败了:

# gdb /usr/bin/dpkg
(gdb) run -i /var/cache/apt/archives/openssh-server_1%3a7.4p1-10+deb9u4_armhf.deb
Starting program: /usr/bin/dpkg -i /var/cache/apt/archives/openssh-server_1%3a7.4p1-10+deb9u4_armhf.deb
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/arm-linux-gnueabihf/libthread_db.so.1".
dpkg: unrecoverable fatal error, aborting:
wait for subprocess dpkg-split failed: No child processes


现在我的问题是:什么可以解释 dpkg 程序在 strace 中运行时的行为不同?

最佳答案

我记得之前在网上讨论过这个:)

https://github.com/strace/strace/issues/14

基本上你可以创建一个包装脚本,像这样(作为 root):

dpkg_path="$(which dpkg)"
mv -v "${dpkg_path}" /usr/bin/dpkg-orig

> "{dpkg_path}" cat << 'EOF'
#!/bin/bash
# pro-tip: You could use a slow disk or an old usb stick
# if writes to /dev/null turn out to be too fast
exec strace -e trace=none -e signal=none -qq -o /dev/null /usr/bin/dpkg-orig "${@}"
EOF

chmod +x "${dpkg_path}"

dpkg 现在应该可以在您的系统上运行了。

关于linux - 什么可以使程序在 `strace` 内表现不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53598305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com