我有一个进程,现在多次停止响应并且似乎完全锁定。它不会响应任何尝试 strace 或偷看 gdb(gdb 只是挂在 wait4() 系统调用上)。该进程是可运行的,并且不等待系统调用 (/proc/X/syscall:)running
或处于不间断睡眠状态 (/proc/X/status:) State: R (running)
。
这个过程究竟处于什么状态?这可能是某种类型的内核错误吗?
进程是redis,这种情况现在已经发生过几次了。似乎唯一可以终止进程的是重新启动。操作系统是 Cent 7。
编辑:内核版本是 3.10.0-123.13.2.el7.x86_64。尝试更新到 3.10.0-229.11.1.el7 以查看是否有任何区别。
我注意到某些/proc/<pid>/
proc ,例如 bash,其全部资源都可以由创建该 proc 的用户读取。然而,其他 proc,例如 chrome 或 gnome-keyring-daemon,它们的大部分/proc/<pid>/
资源只能由 root 访问,尽管进程本身由普通用户拥有并且没有调用 suid。
我对内核进行了一番挖掘,发现如果任务缺少“可转储”标志,则 /proc/ 内容会受到限制,但是我很难理解在哪些情况下任务变得不可转储(setuid 情况除外,这不适用于 chrome 或 gnome-keyring):
https://github.com/torvalds/linux/blob/164c09978cebebd8b5fc198e9243777dbaecdfa0/fs/proc/base.c#L1532
有没有人愿意帮助我了解底层机制及其原因?
谢谢!
编辑:
找到了一个关于为什么您不想让gnome-keyring-daemon
您的用户转储您的 SSH 代理(例如)的好文档。仍然不确定如何 gnome-keyring-daemon
使自己无法倾倒。
我配置了以下服务:
[Unit]
Description=SCollector
After=NetworkManager.service
[Service]
Type=simple
ExecStart=/bin/sh -c "/opt/scollector/scollector /opt/scollector/collectors || (echo '' | /usr/bin/mail -s 'scollector died' jharvey@stackoverflow.com && exit -1)"
Restart=on-failure
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
出于某种原因,mail
当scollector
进程以非 0 退出时,该命令永远不会发送任何邮件。这在命令行上运行时可以正常工作,/bin/sh
调用和所有。我已经捕获了 的 STDOUT 和 STDERR mail
,并且它没有抛出任何错误。中什么都没有maillog
。
是什么赋予了?为什么不发送邮件?
我有一个场景,电子邮件是通过我的出站中继发送的,其中有一个不回复“收件人:”收件人(实际收件人是 BCCd)。
这些电子邮件的示例:
From: <from@mydomain.com>
To: <do-not-reply@mydomain.com>
Bcc: <actualrecipient@gmail.com>
Subject: foo
Run Code Online (Sandbox Code Playgroud)
BCCd 收件人仍应收到邮件,但我想阻止向外部域中存在的不回复收件人发送邮件的尝试。请注意,mydomain.com
传入邮件并非由此 exim 服务器托管 - 此邮件服务器严格用于中继。
我尝试了一种重写方法,但这会修改 BCC 收件人看到的“收件人”地址,这看起来很混乱。由于不回复收件人不会转到本地托管域,因此据我所知,用于黑洞地址的传统别名设置不起作用。