getaddrinfo 或 connect 调用可以将进程置于 D (不可中断状态)

getaddrinfo 或 connect 调用可以将进程置于 D (不可中断状态)

连续几天发生了我们的一个进程无法被“kill -9”杀死的情况。在过去两年多的时间里,kill -9 曾经能够每天可靠地杀死这个进程。此过程已尝试通过 getaddrinfo 连接到远程服务器(该服务器在深夜关闭),并且每 1 秒连接一次。

当我注意到kill -9未能杀死它后(几分钟后),“ps aux”命令显示它位于“S”中。所以严格来说,当“kill -9”运行时,它的状态可能处于“D”状态。

所以我的问题来了, getaddrinfo 或 connect 调用是否有可能将此进程置于“D”状态? getaddrinfo 涉及 DNS 查询,这可能需要一些时间。

这是 strace 信息(我用伪造的 IP 地址替换了 IP 地址),以下序列每 1 秒重复一次:

$ strace -p 3634009
Process 3634009 attached - interrupt to quit
restart_syscall(<... resuming interrupted call ...>) = 0
write(2, "Tue Dec  5 23:01:46 2017 INFO  f"..., 74) = 74
socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 4
socket(PF_NETLINK, SOCK_RAW, 0)         = 6
bind(6, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 0
getsockname(6, {sa_family=AF_NETLINK, pid=3634009, groups=00000000}, [12]) = 0
sendto(6, "\24\0\0\0\26\0\1\3\252k'Z\0\0\0\0\0\0\0\0", 20, 0, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 20
recvmsg(6, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"0\0\0\0\24\0\2\0\252k'ZYs7\0\2\10\200\376\1\0\0\0\10\0\1\0\177\0\0\1"..., 4096}], msg_controllen=0, msg_flags=0}, 0) = 108
recvmsg(6, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"\24\0\0\0\3\0\2\0\252k'ZYs7\0\0\0\0\0\1\0\0\0\10\0\1\0\177\0\0\1"..., 4096}], msg_controllen=0, msg_flags=0}, 0) = 20
close(6)                                = 0
connect(4, {sa_family=AF_INET, sin_port=htons(20458), sin_addr=inet_addr("161.161.161.161")}, 16) = -1 ECONNREFUSED (Connection refused)
write(2, "Tue Dec  5 23:01:46 2017 INFO  ."..., 126) = 126
close(4)                                = 0
write(2, "Tue Dec  5 23:01:46 2017 INFO  f"..., 146) = 146
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
rt_sigaction(SIGCHLD, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
nanosleep({1, 0}, 0x7fffe56288c0)       = 0
**** start of next cycle ****
write(2, "Tue Dec  5 23:01:47 2017 INFO  f"..., 74) = 74
socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 4
socket(PF_NETLINK, SOCK_RAW, 0)         = 6
....

相关内容