인터럽트 가능한 수면 (S) 상태에있는 프로세스를 죽일 수없는 것 같습니다.
[root@jupiter ~]# ps -elf | grep yum
4 S root 16790 1 0 75 0 - 73779 - Jan15 ? 00:00:04 /usr/bin/python /usr/bin/yum -y install python-pip
[root@jupiter ~]# kill -9 16790
[root@jupiter ~]# ps -elf | grep yum
4 S root 16790 1 0 75 0 - 73779 - Jan15 ? 00:00:04 /usr/bin/python /usr/bin/yum -y install python-pip
이것이 어떻게 가능한지? 재부팅하지 않고 프로세스를 종료 할 수있는 방법이 있습니까?
바운티 : 저는 이것이 어떻게 일어날 수 있는지에 대한 설명에 더 관심이 있습니다.
업데이트 : 이것은 lsof의 출력입니다.
[root @ jupiter ~] # lsof -p 16790 명령 PID 사용자 FD 유형 장치 크기 / 꺼짐 노드 이름 yum 16790 루트 cwd DIR 1166,56842 4096 16886249 / home / del yum 16790 루트 rtd DIR 253,0 4096 2 / yum 16790 루트 txt REG 253,0 8304 336177337 / usr / bin / python yum 16790 루트 mem REG 253,0 144776 346128569 /lib64/ld-2.5.so yum 16790 루트 mem REG 253,0 1718232 346128573 /lib64/libc-2.5.so yum 16790 루트 mem REG 253,0 23360 346128599 /lib64/libdl-2.5.so yum 16790 루트 mem REG 253,0 145872 346128584 /lib64/libpthread-2.5.so yum 16790 루트 mem REG 253,0 615136 346128602 /lib64/libm-2.5.so yum 16790 루트 mem REG 253,0 1244792 336171087 /usr/lib64/libpython2.4.so.1.0 yum 16790 루트 mem REG 253,0 95464 346128744 /lib64/libselinux.so.1 yum 16790 루트 mem REG 253,0 53448 346128750 /lib64/librt-2.5.so yum 16790 루트 mem REG 253,0 13960 336187564 /usr/lib64/libplds4.so yum 16790 루트 mem REG 253,0 58400 346128752 /lib64/libgcc_s-4.1.2-20080825.so.1 yum 16790 루트 mem REG 253,0 78384 336173796 /usr/lib64/libelf-0.137.so yum 16790 루트 mem REG 253,0 1139672 336187570 /usr/lib64/librpmdb-4.4.so yum 16790 루트 mem REG 253,0 407792 336187568 /usr/lib64/librpmio-4.4.so yum 16790 루트 mem REG 253,0 233144 336171420 /usr/lib64/libnspr4.so yum 16790 루트 mem REG 253,0 375656 336187569 /usr/lib64/libsqlite3.so.0.8.6 yum 16790 루트 mem REG 253,0 17992 336187563 /usr/lib64/libplc4.so yum 16790 루트 mem REG 253,0 386784 336187571 /usr/lib64/librpm-4.4.so yum 16790 루트 mem REG 253,0 154776 336170228 /usr/lib64/librpmbuild-4.4.so yum 16790 루트 mem REG 253,0 647608 346128759 /lib64/libglib-2.0.so.0.1200.3 yum 16790 루트 mem REG 253,0 1297136 336176959 /usr/lib64/libxml2.so.2.6.26 yum 16790 루트 mem REG 253,0 15584 346128756 /lib64/libtermcap.so.2.0.8 yum 16790 루트 mem REG 253,0 1234328 336187566 /usr/lib64/libnss3.so yum 16790 루트 mem REG 253,0 18152 346128670 /lib64/libutil-2.5.so yum 16790 루트 mem REG 253,0 34240 336177071 /usr/lib64/libpopt.so.0.0.0 yum 16790 루트 mem REG 253,0 67792 336187567 /usr/lib64/libbz2.so.1.0.3 yum 16790 루트 mem REG 253,0 143144 346128763 /lib64/libexpat.so.0.5.0 yum 16790 루트 mem REG 253,0 56434416 336184082 / usr / lib / locale / locale-archive yum 16790 루트 mem REG 253,0 132656 336560181 /usr/lib64/python2.4/site-packages/rpm/_rpmmodule.so yum 16790 루트 mem REG 253,0 154016 336187565 /usr/lib64/libnssutil3.so yum 16790 루트 mem REG 253,0 96885 345638632 /usr/local/greenplum-loaders-3.3.0.0-build-3/lib/libz.so.1.2.3 yum 16790 루트 mem REG 253,0 247496 346128741 /lib64/libsepol.so.1 yum 16790 루트 mem REG 253,0 369144 336168883 /usr/lib64/libsoftokn3.so yum 16790 루트 mem REG 253,0 312336 336178453 /usr/lib64/libfreebl3.so yum 16790 루트 mem REG 253,0 20240 336530067 /usr/lib64/python2.4/lib-dynload/timemodule.so yum 16790 루트 mem REG 253,0 25048 336529953 /usr/lib64/python2.4/lib-dynload/stropmodule.so yum 16790 루트 mem REG 253,0 18984 336530051 /usr/lib64/python2.4/lib-dynload/cStringIO.so yum 16790 루트 mem REG 253,0 21816 336529943 /usr/lib64/python2.4/lib-dynload/collectionsmodule.so yum 16790 루트 mem REG 253,0 52152 336530044 /usr/lib64/python2.4/lib-dynload/_socketmodule.so yum 16790 루트 mem REG 253,0 17200 336530045 /usr/lib64/python2.4/lib-dynload/_ssl.so yum 16790 루트 mem REG 253,0 315080 346128749 /lib64/libssl.so.0.9.8e yum 16790 루트 mem REG 253,0 1366912 346128748 /lib64/libcrypto.so.0.9.8e yum 16790 루트 mem REG 253,0 190976 336187552 /usr/lib64/libgssapi_krb5.so.2.2 yum 16790 루트 mem REG 253,0 613928 336184245 /usr/lib64/libkrb5.so.3.3 yum 16790 루트 mem REG 253,0 11760 346128747 /lib64/libcom_err.so.2.1 yum 16790 루트 mem REG 253,0 153720 336181723 /usr/lib64/libk5crypto.so.3.1 yum 16790 루트 mem REG 253,0 35984 336177832 /usr/lib64/libkrb5support.so.0.1 yum 16790 루트 mem REG 253,0 9472 346128681 /lib64/libkeyutils-1.2.so yum 16790 루트 mem REG 253,0 92816 346128730 /lib64/libresolv-2.5.so yum 16790 루트 mem REG 253,0 75384 336530050 /usr/lib64/python2.4/lib-dynload/cPickle.so yum 16790 루트 mem REG 253,0 23736 336530064 /usr/lib64/python2.4/lib-dynload/structmodule.so yum 16790 루트 mem REG 253,0 27336 336528958 /usr/lib64/python2.4/lib-dynload/operator.so yum 16790 루트 mem REG 253,0 21520 336529958 /usr/lib64/python2.4/lib-dynload/zlibmodule.so yum 16790 루트 mem REG 253,0 37944 336528952 /usr/lib64/python2.4/lib-dynload/itertoolsmodule.so yum 16790 루트 mem REG 253,0 21528 336528929 /usr/lib64/python2.4/lib-dynload/_localemodule.so yum 16790 루트 mem REG 253,0 21208 336529939 /usr/lib64/python2.4/lib-dynload/binascii.so yum 16790 루트 mem REG 253,0 12080 336530062 /usr/lib64/python2.4/lib-dynload/shamodule.so yum 16790 루트 mem REG 253,0 13168 336530058 /usr/lib64/python2.4/lib-dynload/md5module.so yum 16790 루트 mem REG 253,0 18000 336529947 /usr/lib64/python2.4/lib-dynload/mathmodule.so yum 16790 루트 mem REG 253,0 12504 336529934 /usr/lib64/python2.4/lib-dynload/_randommodule.so yum 16790 루트 mem REG 253,0 15320 336528948 /usr/lib64/python2.4/lib-dynload/fcntlmodule.so yum 16790 루트 mem REG 253,0 32816 336530049 /usr/lib64/python2.4/lib-dynload/bz2.so yum 16790 루트 mem REG 253,0 8608 336529946 /usr/lib64/python2.4/lib-dynload/grpmodule.so yum 16790 루트 mem REG 253,0 38696 336529819 /usr/lib64/python2.4/site-packages/cElementTree.so yum 16790 루트 mem REG 253,0 42672 336530047 /usr/lib64/python2.4/lib-dynload/arraymodule.so yum 16790 루트 mem REG 253,0 9368 336528915 /usr/lib64/python2.4/lib-dynload/_bisect.so yum 16790 루트 mem REG 253,0 74992 336529944 /usr/lib64/python2.4/lib-dynload/datetime.so yum 16790 루트 mem REG 253,0 372912 336560510 /usr/lib64/python2.4/site-packages/M2Crypto/__m2crypto.so yum 16790 루트 mem REG 253,0 7120 336529937 /usr/lib64/python2.4/lib-dynload/_weakref.so yum 16790 루트 mem REG 253,0 17496 336528966 /usr/lib64/python2.4/lib-dynload/selectmodule.so yum 16790 루트 mem REG 253,0 46448 336528961 /usr/lib64/python2.4/lib-dynload/pyexpat.so yum 16790 루트 mem REG 253,0 33896 336529820 /usr/lib64/python2.4/site-packages/_sqlite.so yum 16790 루트 mem REG 253,0 41784 336530075 /usr/lib64/python2.4/site-packages/_sqlitecache.so yum 16790 루트 mem REG 253,0 25104 336530066 /usr/lib64/python2.4/lib-dynload/termios.so yum 16790 루트 mem REG 253,0 7280 336530065 /usr/lib64/python2.4/lib-dynload/syslog.so yum 16790 루트 mem REG 253,0 25464 336265457 /usr/lib64/gconv/gconv-modules.cache yum 16790 루트 mem REG 253,0 66544 336528926 /usr/lib64/python2.4/lib-dynload/_cursesmodule.so yum 16790 루트 mem REG 253,0 380336 336181932 /usr/lib64/libncurses.so.5.5 yum 16790 루트 mem REG 253,0 405880 336529957 /usr/lib64/python2.4/lib-dynload/unicodedata.so yum 16790 루트 mem REG 253,0 24576 236520047 /var/lib/rpm/__db.001 yum 16790 루트 mem REG 253,0 53880 346128424 /lib64/libnss_files-2.5.so yum 16790 루트 mem REG 253,0 23736 346128408 /lib64/libnss_dns-2.5.so yum 16790 루트 mem REG 253,0 1318912 236520050 /var/lib/rpm/__db.002 yum 16790 루트 mem REG 253,0 663552 236520051 /var/lib/rpm/__db.003 yum 16790 루트 mem REG 253,0 769074 336174965 /usr/share/locale/en_US/LC_MESSAGES/redhat-dist.mo yum 16790 루트 0u CHR 136,8 0t0 10 / dev / pts / 8 (삭제됨) yum 16790 루트 1u CHR 136,8 0t0 10 / dev / pts / 8 (삭제됨) yum 16790 루트 2u CHR 136,8 0t0 10 / dev / pts / 8 (삭제됨) m 16790 루트 3u 유닉스 0xffff8104388d2e40 0t0 4675113 소켓 yum 16790 루트 4w REG 253,0 236522326 /var/log/yum.log yum 16790 루트 5u REG 253,0 605184 236520025 /var/cache/yum/WANdisco-dev/primary.xml.gz.sqlite yum 16790 루트 6u REG 253,0 20480 236524002 /var/cache/yum/addons/primary.sqlite.old.tmp (삭제됨) yum 16790 루트 7u REG 253,0 12578816 236519970 /var/cache/yum/base/primary.xml.gz.sqlite.old.tmp (삭제됨) yum 16790 루트 8u REG 253,0 17972224 236523993 /var/cache/yum/epel/317109b44f1b0b40d910dc60c9080e62c7f4b16a-primary.sqlite.old.tmp (삭제됨) yum 16790 루트 9u REG 253,0 967680 236524055 /var/cache/yum/extras/primary.sqlite.old.tmp (삭제됨) yum 16790 루트 10u REG 253,0 459776 246415366 /var/cache/yum/pgdg92/primary.sqlite.old.tmp (삭제됨) yum 16790 루트 11u REG 253,0 4927488 236524060 /var/cache/yum/updates/primary.sqlite.old.tmp (삭제됨) yum 16790 루트 12r REG 253,0 65204224 236519434 / var / lib / rpm / 패키지 yum 16790 루트 13r REG 253,0 45056 236519438 / var / lib / rpm / Name yum 16790 루트 14u IPv4 4675317 0t0 TCP jupiter.example.com:33597->riksun.riken.go.jp:http (ESTABLISHED) yum 16790 루트 15u IPv4 4675939 0t0 TCP jupiter.example.com:52708->freedom.itsc.cuhk.edu.hk:http (CLOSE_WAIT) yum 16790 루트 16r REG 253,0 65204224 236519434 / var / lib / rpm / 패키지 yum 16790 루트 17r REG 253,0 45056 236519438 / var / lib / rpm / 이름 yum 16790 루트 18r REG 253,0 12288 236519440 / var / lib / rpm / Pubkeys m 16790 루트 20r FIFO 0,6 0t0 4676024 파이프 m 16790 루트 24w FIFO 0,6 0t0 4676024 파이프
답변
S 또는 D 상태의 프로세스는 일반적으로 파일 또는 네트워크에 대한 읽기 또는 쓰기, 호출 된 프로그램의 완료 대기 또는 세마포어 또는 기타 동기화 기본 요소 대기와 같은 블로킹 시스템 호출에 있습니다. 기다리는 동안 절전 상태가됩니다.
“깨워”수 없습니다. 대기중인 데이터 / 리소스를 사용할 수있을 때만 진행됩니다. 이것은 모두 정상이며 예상 된 것이며, 죽이려고 할 때만 문제가됩니다.
strace -p pid
프로세스 pid에 대해 현재 어떤 시스템 호출이 일어나고 있는지 알아 내기 위해 시도하고 사용할 수 있습니다 .
에서 위키 피 디아 :
무정전 절전 상태는 신호를 즉시 처리하지 않는 절전 상태입니다. 대기중인 자원이 사용 가능해 지거나 대기 중 시간 종료가 발생한 후 (잠자기 상태에서 지정된 경우)에만 깨워집니다. 주로 디스크 또는 네트워크 IO (입력 / 출력)를 기다리는 장치 드라이버가 사용합니다. 프로세스가 중단없이 휴면 상태 인 경우 프로세스가 시스템 호출 또는 트랩에서 복귀하면 휴면 중에 누적 된 신호가 나타납니다.
시스템 호출에서 차단 된 프로세스는 무정전 절전 모드에 있으며 이름에서 알 수 있듯이 루트조차도 실제로 무정전입니다.
일반적으로 프로세스는 SIGKILL을 차단할 수 없습니다. 그러나 커널 코드는 시스템 호출을 호출 할 때 커널 코드를 실행할 수 있으며 프로세스는 커널 코드가 모든 신호를 차단합니다. 따라서 시스템 호출이 무기한 차단되는 경우 프로세스를 효과적으로 종료 할 수있는 방법이 없을 수 있습니다. SIGKILL은 프로세스가 시스템 호출을 완료 할 때마다 적용됩니다.
답변
수면 과정에 대한 배경
이 유닉스 및 리눅스 게시물을 살펴볼 수 있습니다.
특히이 답변은 /unix//a/5648/7453 입니다.
그 게시물에서 발췌
프로세스를 강제 종료 할 권한이있는 경우 kill -9 (SIGKILL)가 항상 작동합니다. 기본적으로 프로세스는 setuid 또는 setgid가 아니어야 시작하거나 루트 여야합니다. 한 가지 예외가 있습니다. root조차도 치명적인 신호를 PID 1 (초기 프로세스)에 보낼 수 없습니다.
그러나 kill -9는 즉시 작동하지 않을 수 있습니다. SIGKILL을 포함한 모든 신호는 비동기식으로 전달됩니다. 커널이 신호를 전달하는 데 시간이 걸릴 수 있습니다. 일반적으로 신호를 전달하는 데 최대 몇 마이크로 초가 걸리며, 대상이 시간 조각을 얻는 데 걸리는 시간입니다. 그러나 대상이 신호를 차단 한 경우 대상이 차단을 해제 할 때까지 신호가 대기됩니다.
일반적으로 프로세스는 SIGKILL을 차단할 수 없습니다. 그러나 커널 코드는 시스템 호출을 호출 할 때 커널 코드를 실행할 수 있으며 프로세스는 커널 코드를 실행합니다. 커널 호출은 시스템 호출을 방해 할 때 모든 신호를 차단하여 커널 어딘가에 데이터 구조가 잘못 형성되거나,보다 일반적으로 일부 커널 불변이 위반 될 수 있습니다. 따라서 (버그 또는 잘못된 디자인으로 인해) 시스템 호출이 무기한으로 차단되면 프로세스를 종료시킬 수있는 방법이 사실상 없을 수 있습니다. 그러나 시스템 호출이 완료되면 프로세스가 종료됩니다.
…
…
나는 그 대답의 나머지 부분을 읽는 것이 좋습니다!
리소스 (파일 또는 네트워크)에 의해 차단 된 프로세스 종료
시도해야 할 두 가지가 있습니다.
1. yum의 .pid 파일 제거
m 잠금 파일이 있습니까? 해당 잠금 파일을 제거하면 어떻게됩니까? 나는 그것이 진행될 수 있다고 생각합니다.
rm /var/run/yum.pid
2. 걸려있는 CLOSE_WAIT
TCP 연결 강제 종료
A CLOSE_WAIT
는 다음과 같이 설명됩니다.
CLOSE_WAIT 서버가 클라이언트로부터 첫 번째 FIN 신호를 받았으며 연결이 종료되고 있음을 나타냅니다.
따라서 이것은 본질적으로 소켓이 애플리케이션이 close () 실행을 기다리는 상태임을 의미합니다.
소켓은 애플리케이션이 닫힐 때까지 무기한 CLOSE_WAIT 상태에있을 수 있습니다. 잘못된 시나리오는 파일 설명자 유출과 같으며 서버가 소켓에서 close ()를 실행하지 않아 close_wait 소켓이 쌓이게됩니다.
참고 : technet 웹 사이트 에서 발췌 .
이를 위해 두 가지 도구를 사용할 수 있습니다.
이러한 도구 는 TCP 연결을 완전히 닫는 데 필요한 FIN-ACK-RST 교환을 시뮬레이션하여 작동합니다 .
Killcx는 가짜 SeqNum으로 가짜 SYN 패킷을 생성하여 원격 클라이언트 IP / 포트를 스푸핑하여 서버로 보냅니다. 서버 응답을 캡처하고 ACK 패킷에서 2 개의 마법 값을 추출하고이를 사용하여 스푸핑 된 RST 패킷을 보내는 하위 프로세스를 분기합니다. 연결이 닫힙니다.
참고 : Killcx 웹 사이트 에서 발췌 .
커터 사용
주어진 두 IP / 포트 번호 쌍 사이의 특정 연결을 끊습니다.
# cutter ip-address-1 port-1 ip-address-2 port-2
% cutter 200.1.2.3 22 10.10.0.45 32451
Killcx 사용
원격 IP 및 포트에 대한 연결을 끊습니다.
# killcx remote-ip-address:port
% killcx 120.121.122.123:1234
자원
답변
부모 프로세스를 죽일 수 있습니다. ps를 사용하여 확인하십시오.
ps xjf -C yum
그런 다음 kill -9
모든 부모 프로세스.
답변
strace를 사용하여 프로세스에 연결하여 실제로 유휴 상태인지 또는 IO 작업을 고수했는지 확인하는 것이 좋습니다. 아마도이 문제에 대한 추가 힌트를 제공 할 수 있습니다.
strace -pPID
내가 읽은 것부터이 프로세스를 재부팅하는 것 외에는 죽일 방법이 없습니다. 프로세스가 눈에 띄는 CPU 시간을 소비하지 않으면 서버에 부정적인 영향을 미치지 않을 것입니다.
답변
자식 프로세스를 기다리는 것일 수 있습니까? 나는 ps faux
그것이 자식 프로세스가 있는지 여부와 당신이 죽여야 할 수도 있는지를 알려줄 것이기 때문에 사랑 합니다.