- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我的子进程正在尝试访问 PCI 地址空间。它在大多数时候都运行良好。
但是,有时子进程会进入僵尸状态。 dmesg 日志显示以下总线错误。
[ 501.134156] Caused by (from MCSR=10008): Bus - Read Data Bus Error
[ 501.134169] Oops: Machine check, sig: 7 [#1]
本例中没有生成核心文件。
[Linux:/]$ ps -axl | grep tes1
4 0 6805 32495 20 0 0 0 exit Zl ? 0:05 [test1] <defunct>
[Linux:/]$
Core 由子进程为 SIGSEGV 错误生成。所以我认为它与权限/ulimit 设置无关。
谁能帮我理解为什么在这种情况下没有生成核心?
Child Process:
--------------
[Linux:/]$ cat /proc/6805/status
Name: test1
State: Z (zombie)
Tgid: 6805
Pid: 6805
PPid: 32495
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 0 0 0
FDSize: 0
Groups:
Threads: 2
SigQ: 18/13007
SigPnd: 0000000002000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000001006
SigCgt: 0000000182000200
CapInh: 0000000000000000
CapPrm: 0000001fffffffff
CapEff: 0000001fffffffff
CapBnd: 0000001fffffffff
Seccomp: 0
Cpus_allowed: 3
Cpus_allowed_list: 0-1
voluntary_ctxt_switches: 8998
nonvoluntary_ctxt_switches: 857
Stack:
-------
[Linux:/]$ cat /proc/6805/stack
[<00000000>] (nil)
[<c0008640>] __switch_to+0xc0/0x160
[<c004b4f4>] do_exit+0x5d4/0xa70
[<c000c694>] die+0x224/0x310
[<c000ce44>] machine_check_exception+0x124/0x1e0
[<c00123bc>] ret_from_mcheck_exc+0x0/0x14c
[Linux:/]$
Parent Process:
---------------
[Linux:/]$ cat /proc/32495/status
Name: test
State: S (sleeping)
Tgid: 32495
Pid: 32495
PPid: 21911
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 0 0 0
FDSize: 256
Groups:
VmPeak: 4820 kB
VmSize: 4820 kB
VmLck: 0 kB
VmPin: 0 kB
VmHWM: 2548 kB
VmRSS: 2548 kB
VmData: 1284 kB
VmStk: 132 kB
VmExe: 900 kB
VmLib: 1976 kB
VmPTE: 24 kB
VmSwap: 0 kB
Threads: 1
SigQ: 19/13007
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000010000
SigIgn: 0000000000001006
SigCgt: 0000000043816ef9
CapInh: 0000000000000000
CapPrm: 0000001fffffffff
CapEff: 0000001fffffffff
CapBnd: 0000001fffffffff
Seccomp: 0
Cpus_allowed: 3
Cpus_allowed_list: 0-1
voluntary_ctxt_switches: 274
nonvoluntary_ctxt_switches: 145
[Linux:/]$
最佳答案
我知道被映射的 PCI 硬件没有响应。所以,只有内核来处理错误是合适的。
错误不会传播到用户级别,因为这不是软件故障。因此,我们没有得到核心转储(内核或用户空间),因为它不是软件故障。
内核中的机器检查异常处理程序告诉硬件故障是什么,以及相关的地址/数据(取决于原因)- 需要从硬件角度进一步调查。
关于linux - 子进程不会仅针对 SIGBUS 错误生成核心并成为僵尸进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41933777/
更新:-[NSIndexPath行]:消息发送到已释放实例0x895fe70 当我在设备上运行我的应用程序并进行分析时,它说: 将一个Objective-C消息发送到地址为0xaa722d0的已释放对
我现在大部分时间都在尝试调试我的 Backbone 多页面应用程序以摆脱“僵尸”,但不幸的是没有成功。在今天之前,我什至没有意识到我有一个僵尸问题。我做错了什么? 这是我的区域经理: var re
我确实读过这篇文章:https://blog.phusion.nl/2015/01/20/docker-and-the-pid-1-zombie-reaping-problem/ 设置一些上下文:文章
调试使用 iPhone SDK 3.x 目标构建的应用程序时是否支持 NSZombiesEnabled? 此外,如果支持的话,我可以在哪里获取支持的可能级别的列表吗? 最佳答案 是的,设备和模拟器都支
我正在尝试了解主干,并且目前正在努力尝试僵尸 View 。我已经阅读了很多有关此问题的堆栈溢出信息,但仍然无法解决。 为了简单起见,我设置了两个需要切换的 View (无数据)。 到目前为止,我所做的
我正在尝试使用 psycopg 和多处理插入和更新几百万行。查看 http://initd.org/psycopg/docs/usage.html#thread-and-process-safety
我的应用程序在 Linux 机器上进入僵尸状态,它无法被杀死并且 gdb 无法附加到它,我无法调试。现在我想知道最后调用的函数或回溯,无论如何我可以得到这个吗?/proc/pid/stat 下是否有我
我将我的程序作为守护进程运行。 父进程只等待子进程,当它意外死亡时,fork并再次等待。 for (; 1;) { if (fork() == 0) break; int sig = 0;
注意:我们使用的是 Backbone 1.0.0 我对 Backbone 比较陌生,并且打算通过前同事编写的一些代码。我不是盲目地复制粘贴东西,而是想了解他是如何做事的,这就是我开始思考处理僵尸 Vi
我的 Backbone Marionette 应用程序出现问题,我的 subview 没有被完全破坏。您如何正确销毁要替换为另一个布局/项目 View 的嵌套布局 View ? 我对 Marionet
我有两个应用程序在一个服务器上运行,它们执行 headless (headless)浏览任务。每次浏览时,Xvfb 进程并没有死,而是变成了僵尸。我可以用以下脚本确认这一点。 require 'hea
我正在尝试使用 Marionet 模块来玩 Backbone。 例如。实现“加载微调器”,正如 David Sulc 在“contact manager”应用程序中所做的那样,Firefox 的“ba
当我尝试使用 Xcode 菜单(Product - Archive)直接存档项目时,效果很好。但是当我尝试从集成菜单 (bot) 执行它时,出现了这个错误: Build operation faile
我有一个从 nib 构建的 MainWindow 类,设置如下: - (void)applicationDidFinishLaunching:(UIApplication *)application
我关注 this answer跟踪我的应用的 EXC_BAD_ACCESS。是的,我有一个僵尸物体。当我试图找出哪一行代码是错误的时,我发现所有负责任的图书馆都是基金会的。 当我尝试这样做时: Whe
我是 iOS 开发的新手,非常感谢您帮助我找出我遇到的错误的根本原因。 我尝试使用 Instruments(即 Allocations-Zombie Profiler)调试错误,但我无法理解所呈现的调
我是一名优秀的程序员,十分优秀!