ක්රෝම් බ්රව්සරය ප්රතිචාර <defunct>
නොදැක්වූ අතර මම එය kill ාතනය කිරීමට උත්සාහ කළෙමි, නමුත් අතුරුදහන් වීම වෙනුවට ක්රියාවලිය එහි දකුණු පැත්තේ තිබූ අතර මරණයට පත් නොවීය:
<defunct>
ක්රියාවලියක් යනු කුමක්ද සහ එය මරණයට පත් නොවන්නේ ඇයි?
ක්රෝම් බ්රව්සරය ප්රතිචාර <defunct>
නොදැක්වූ අතර මම එය kill ාතනය කිරීමට උත්සාහ කළෙමි, නමුත් අතුරුදහන් වීම වෙනුවට ක්රියාවලිය එහි දකුණු පැත්තේ තිබූ අතර මරණයට පත් නොවීය:
<defunct>
ක්රියාවලියක් යනු කුමක්ද සහ එය මරණයට පත් නොවන්නේ ඇයි?
Answers:
ඔබගේ නිමැවුමෙන් අපට "අක්රිය" බවක් පෙනේ, එයින් අදහස් වන්නේ ක්රියාවලිය එහි කර්තව්යය සම්පූර්ණ කර හෝ දූෂිත හෝ මරා දමා ඇති බවයි, නමුත් එහි ළමා ක්රියාදාමයන් තවමත් ක්රියාත්මක වෙමින් පවතී හෝ මෙම දෙමාපිය ක්රියාවලිය එහි ළමා ක්රියාවලිය අධීක්ෂණය කරයි. මේ ආකාරයේ ක්රියාවලියක් kill ාතනය කිරීමට, -9 PID kill ාතනය නොකරයි. මෙම විධානය මඟින් ඔබට ඔවුන්ව kill ාතනය කිරීමට උත්සාහ කළ හැකි නමුත් එය මෙය නැවත නැවතත් පෙන්වනු ඇත.
මෙම අක්රිය ක්රියාවලියේ මව් ක්රියාවලිය කුමක්දැයි තීරණය කර එය මරා දමන්න. මෙය දැන ගැනීම සඳහා විධානය ක්රියාත්මක කරන්න:
ps -ef | grep defunct
UID PID PPID C STIME TTY TIME CMD
1000 637 27872 0 Oct12 ? 00:00:04 [chrome] <defunct>
1000 1808 1777 0 Oct04 ? 00:00:00 [zeitgeist-datah] <defunct>
එවිට kill -9 637 27872
, එම අභාවයට ගොස් ක්රියාවලිය විසින් පිට වී ගොස් ඇත තහවුරු ps -ef | grep defunct
.
1
( init
) නම් කුමක් කළ යුතුද ? මට බලා සිටීමට සිදුවනු ඇතැයි සිතමු?
ps -ef | grep defunct | grep -v grep | cut -b8-20 | xargs kill -9
grep [d]efunct
හෝ ඊට සමාන ලෙස වෙනස් කරන්න , එය එයට නොගැලපේ.
parents_of_dead_kids=$(ps -ef | grep [d]efunct | awk '{print $3}' | sort | uniq | egrep -v '^1$'); echo "$parents_of_dead_kids" | xargs kill
. තත්පර 30 ක් හෝ ඊට පසුව ස්ක්රිප්ට් එක නැවත ක්රියාත්මක කරන්න, kill -9
ඔබට අවශ්ය නම්. (මම killing ාතනය කිරීම විශේෂයෙන් තහනම් කර ඇති බව සලකන්න Init
)
අත්පොත පිටුව ps (1) මෙසේ පවසයි :
සලකුණු කරන ලද
<defunct>
ක්රියාදාමයන් මළ ක්රියාදාමයන් වේ (ඊනියා "පිල්ලි" ) ඔවුන්ගේ මවුපියන් නිසි ලෙස විනාශ කර නැති නිසා ඉතිරිව පවතී.init(8)
මව් ක්රියාවලිය පිටව ගියහොත් මෙම ක්රියාවලීන් විනාශ වේ.
ඔබට එය මරා දැමිය නොහැක මන්ද එය දැනටමත් මිය ගොස් ඇත. ඉතිරිව ඇත්තේ ක්රියාවලි වගුවේ ඇතුළත් කිරීම පමණි :
යුනික්ස් සහ යුනික්ස් වැනි පරිගණක මෙහෙයුම් පද්ධති වල, පිල්ලියක් ක්රියාවලියක් හෝ අක්රිය ක්රියාවලියක් යනු ක්රියාත්මක කිරීම සම්පූර්ණ කළ ක්රියාවලියක් වන නමුත් තවමත් ක්රියාවලි වගුවේ ඇතුළත් කර ඇත. දෙමව්පියන්ගේ ක්රියාවලියට එහි දරුවාගේ පිටවීමේ තත්ත්වය කියවීමට ඉඩ දීම සඳහා මෙම ප්රවේශය තවමත් අවශ්ය වේ.
ඒවායින් බොහොමයක් නොමැති නම් එවැනි ක්රියාදාමයන්ට ඉඩ දීමෙන් කිසිදු හානියක් නොමැත. සොම්බි අවසානයේ අස්වැන්න නෙළා ගන්නේ එහි මවුපියන් විසිනි (ඇමතීමෙන් wait(2)
). මුල් දෙමව්පියන් තමන්ගේ පිටවීමට පෙර එය නෙලා නොගත්තේ නම්, init
ක්රියාවලිය ( pid == 1
) පසුකාලීනව එය කරයි. සොම්බි ක්රියාවලිය සාධාරණයි:
ක්රියාවලිය අවසන් වී ඇති අතර එම ක්රියාවලිය අවසන් වන තෙක් බලා සිටින වෙනත් ක්රියාවලියකට එහි පිටවීමේ තත්ත්වය වාර්තා වූ විට එය මකා දමනු ලැබේ.
පැඩිංටන්ගේ පිළිතුර පුළුල් කරමින් ..
ඔබගේ නිමැවුමෙන් අපට අක්රීය බවක් පෙනේ , එයින් අදහස් වන්නේ මෙම ළමා ක්රියාවලිය එහි කාර්යය සම්පූර්ණ කර හෝ දූෂිත හෝ මරා දමා ඇති බවයි. එහි මව් ක්රියාවලිය තවමත් ක්රියාත්මක වන අතර එහි මියගිය දරුවා දැක නැත.
kill -9 PID
වැඩ කරන්නේ නැත (දැනටමත් මිය ගොස් ඇත).
මෙම ළමා ක්රියාවලියේ මවුපියන් තීරණය කිරීම සඳහා, මෙම විධානය ක්රියාත්මක කරන්න:
ps -ef | grep defunct
UID PID **PPID** C STIME TTY TIME CMD
1000 637 27872 0 Oct12 ? 00:00:04 [chrome] <defunct>
දෙමව්පියන් කවුදැයි බලන්න: ps ax | grep 27872
ඔබට අවශ්ය නම් ඔබට මවුපියන් මරා දැමිය හැකිය.
kill -9 27872
වඩාත් තාක්ෂණික තර්කනය සඳහා ජේ. එෆ්. සෙබස්තියන්ගේ පිළිතුර බලන්න.
@ පැඩිංටන්ගේ පිළිතුරට එකතු කරමින්, ඉක්මන් පරීක්ෂා කිරීම සඳහා මම මෙම කාර්යය මගේ bashrc වෙත එක් කළෙමි:
defunct(){
echo "Children:"
ps -ef | head -n1
ps -ef | grep defunct
echo "------------------------------"
echo "Parents:"
ppids="$(ps -ef | grep defunct | awk '{ print $3 }')"
echo "$ppids" | while read ppid; do
ps -A | grep "$ppid"
done
}
එය මෙවැනි දෙයක් ප්රතිදානය කරයි:
ළමුන්: UID PID PPID C STIME TTY TIME CMD පරිශීලක 25707 25697 0 පෙබ 26 pts / 0 00:00:00 [sh] පරිශීලක 30381 29915 0 11:46 pts / 7 00:00:00 grep අක්රීයයි ------------------------------ දෙමාපියන්: 25697 pts / 0 00:00:00 npm
ස්තූතියි මයික් එස්. අපි ඔබේ රේඛාව ගෙන පිටපතක් ලිව්වා, එහි දෙමව්පියන් in.telnetd හි අක්රිය ක්රියාවලීන් විනාශ කරයි. කිසිදු මව් ක්රියාවලියක් kill ාතනය කිරීම අපට අවශ්ය නොවීය, ගැටලුවක් ඇති වන බව අප දන්නා අතර අවශ්ය නම් බහුවිධයන් kill ාතනය කිරීම සඳහා අපි එය කිහිප වතාවක් ක්රියාත්මක කරන්නෙමු.
# egrep -v '^1$ = Make sure the process is not the init process.
# awk '{print $3}' = Print the parent process.
first_parent_of_first_dead_kid=$(ps -ef | grep [d]efunct | awk '{print $3}' | head -n1 | egrep -v '^1$')
echo "$first_parent_of_first_dead_kid"
# If the first parent of the first dead kid is in.telnetd, then kill it.
if ps -ef | grep $first_parent_of_first_dead_kid | grep in.telnetd;then
echo "We have a defunct process whose parent process is in.telnetd" | logger -t KILL-DEFUNCT-TELNET
echo "killing $first_parent_of_first_dead_kid" | logger -t KILL-DEFUNCT-TELNET
kill $first_parent_of_first_dead_kid 2>&1 | logger -t KILL-DEFUNCT-TELNET
fi
kill -9 PID
වැඩ නොකරන්න" යනුවෙන් සඳහන් වේ. එය අර්ධ වශයෙන් සත්යයකි: යථාර්ථය නම්, කිසිදු kill ාතනයක් සිදු නොවනු ඇත. ඊට අමතරව, -9 අවසාන පියවරක් ලෙස භාවිතා කළ යුතුය. දෙමව්පියන්ගේ ක්රියාවලිය සුපුරුදු ලෙස kill ාතනය කිරීමෙන් 99% ක්ම එය මරා දමා සියලු දරුවන් නෙළා ගනු ඇත. “පෙරනිමි kill ාතනය” යනු SIGTERM (-15) ය. -9 (SIGKILL) හි රසිකයින්ට stackoverflow.com/questions/690415/…