getaddrinfo 또는 연결 호출은 프로세스를 D(무중단 상태)로 전환할 수 있습니다.

getaddrinfo 또는 연결 호출은 프로세스를 D(무중단 상태)로 전환할 수 있습니다.

"kill -9"로 프로세스 중 하나를 종료할 수 없는 문제가 며칠 동안 발생했습니다. Kill -9는 2년 넘게 매일 이 프로세스를 안정적으로 종료할 수 있었습니다. 이 프로세스는 getaddrinfo(밤 늦게 종료됨)를 통해 원격 서버에 연결을 시도했으며 1초마다 연결되었습니다.

kill -9가 그것을 죽이는데 실패했다는 것을 알아차렸을 때(몇 분 후), "ps aux" 명령은 그것이 "S"에 있다는 것을 보여주었습니다. 따라서 엄밀히 말하면 "kill -9"가 실행되면 상태는 "D" 상태가 될 수 있습니다.

제 질문은 getaddrinfo 또는 연결 호출을 사용하여 이 프로세스를 "D" 상태로 전환할 수 있습니까?입니다. getaddrinfo에는 DNS 조회가 포함되므로 시간이 좀 걸릴 수 있습니다.

다음은 추적 정보입니다(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
....

관련 정보