Ctrl + C ක්‍රියාවලියක් විනාශ කළ නොහැකි විට කුමක් කළ යුතුද?


186

Ctrl+ Cසෑම විටම වත්මන් ක්‍රියාවලිය විනාශ කිරීමට ක්‍රියා නොකරයි (නිදසුනක් ලෙස, එම ක්‍රියාවලිය ඇතැම් ජාල මෙහෙයුම් වල කාර්යබහුල නම්). එවැනි අවස්ථාවකදී, ඔබ ඔබේ කර්සරය මඟින් "^ C" දකින අතර තවත් බොහෝ දේ කළ නොහැක.

මගේ පර්යන්තය අහිමි නොවී එම ක්‍රියාවලිය දැන් මිය යාමට බල කිරීමට ඇති පහසුම ක්‍රමය කුමක්ද?

පිළිතුරු වල සාරාංශය: සාමාන්‍යයෙන්, ඔබට ක්‍රියාවලිය නිදා ගැනීමට Ctrl+ කළ හැකිය Z, ඉන්පසු කරන්න kill -9 _process-pid_, එහිදී ඔබ ක්‍රියාවලියේ පිඩ් ps සහ වෙනත් මෙවලම් සමඟ සොයා ගනී . මත බෑෂ් (සහ බොහෝ විට අනෙකුත් ෂෙල් වෙඩි), ඔබට සිදු කළ හැකි kill -9 %1(හෝ පොදුවේ '% N') පහසු වන. නම් Ctrl+ Zවැඩ කරන්නේ නැත, ඔබ තවත් පර්යන්තය විවෘත කිරීමට සිදුවේවි මරා එතැනින්.


screenහැකි විසඳුමක් වනු ඇත, නව කවුළුවක් සහ killක්‍රියාවලිය එතැන් සිට නිර්මාණය කිරීමට ඔබට ඉඩ සලසයි .
බොබී

2
ඔබ දැනටමත් තිරයක සිට ඇතැයි සිතමු :)
ඩස්ටින් බොස්වෙල්

Answers:


130

Ctrl+ Cක්‍රියා නොකරන්නේ මන්ද යන ගැටළුව තේරුම් ගැනීමට, ඔබ එය එබූ විට කුමක් සිදුවේද යන්න තේරුම් ගැනීම ඉතා ප්‍රයෝජනවත් වේ:

බොහෝ ෂෙල් වෙඩි බන්ධනය Ctrl+ දැනට "පෙරබිමෙහි ක්‍රියාත්මක වන වැඩසටහනට SIGINT සං signal ාවක්C යැවීමට ". මිනිසාගේ සං signal ාව හරහා ඔබට විවිධ සං als ා ගැන කියවිය හැකිය :

 SIGINT        2       Term    Interrupt from keyboard

SIGTSTP නොසලකා හැරිය හැකි බැවින් වැඩසටහන් වලට එම සං signal ාව නොසලකා හැරිය හැකිය:

 SIGTSTP   18,20,24    Stop    Stop typed at tty

(ඔබ Ctrl+ එබූ විට බොහෝ ෂෙල් වෙඩි කරන්නේ Zඑයයි, ඒ නිසා එය වැඩ කිරීමට සහතික නොවේ.)

: සමහර සංඥා ක්රියාවලිය විසින් නොසලකා හැර කළ නොහැකි වේ SIGKILL , SIGSTOP සහ තවත් අය. Kill විධානය හරහා ඔබට මෙම සං als ා යැවිය හැකිය . එබැවින්, ඔබගේ එල්ලෙන / පිල්ලි ගැසීමේ ක්‍රියාවලිය විනාශ කිරීමට, ක්‍රියාවලි හැඳුනුම්පත (PID) සොයා ගන්න. උදාහරණයක් ලෙස, භාවිතා කරන්න pgrepහෝ psපසුව killඑය:

 % kill -9 PID

13
හුදු ප්‍රකාශයක්. "පිල්ලිය" යනු තාක්ෂණික වශයෙන් ක්‍රියාවලි තත්වයක් වන අතර එය "පිල්ලියක්" යන්නෙන් ඔබ අදහස් කළ දෙයට සමාන නොවේ. (බලා නොසිටි අවසන් කරන ලද ක්‍රියාවලියක් () - එහි මවුපියන් විසින් සංස්කරණය කරන ලද ( Z) තත්වයේ පවතී. මේ අවස්ථාවේ දී එයට තවදුරටත්
සං als ා

අහෝ, සමහර විට ctrl + c, ctrl + z, සහ ctrl + \ සියල්ලම කිසිවක් නොකරන අතර ක්‍රියාවලිය අහෝ සුඩෝ (මුරපදයක් නොමැතිව අවසර ඇත) ක්‍රියාත්මක වන බැවින් ඔබට ක්‍රියාවලියට සං signal ාවක් යැවිය නොහැක.
මයිකල්

119

නම් Ctrl+ C(SIGINT) වැඩ, උත්සාහක දිනුමක් නැත Ctrl+ \(SIGQUIT). ඉන්පසු Ctrl+ Z(SIGTSTP) උත්සාහ කරන්න . එය ඔබව නැවත ෂෙල් විමසුමක් වෙත යොමු කරන්නේ killනම්, ක්‍රියාවලි හැඳුනුම්පතේ කරන්න. (මෙය ඔබට නියම කළ හැකි SIGTERM සං signal ාවට පෙරනිමිය kill -TERM. සමහර ෂෙල් වෙඩි වලදී ඔබට %1PID වෙත යොමු වීමට භාවිතා කළ හැකිය .) එය ක්‍රියා නොකරන්නේ නම්, වෙනත් පර්යන්තයකට හෝ SSH සැසියකට ගොස් කරන්න killහෝ kill -TERMකරන්න ක්‍රියාවලි හැඳුනුම්පත. අවසන් වරට ඔබ කළ යුත්තේ kill -KILL, kill -9ක්‍රියාවලියට පිරිසිදුව ගබ්සා කිරීමට, විවෘත ලිපිගොනු සමමුහුර්ත කිරීමට, එහි තාවකාලික ලිපිගොනු ඉවත් කිරීමට, ජාල සම්බන්ධතා වසා දැමීමට යනාදිය අවස්ථාවක් ලබා නොදෙන හෙයිනි.


37

මෙම සබැඳියද බලන්න .

Ctrl+ Z: ක්‍රියාවලියක් විරාමයක් තබන්න.

Ctrl+ C: ක්‍රියාවලිය වසා දැමීමට කාරුණිකව ඉල්ලා සිටින්න.

Ctrl+ \: දැනට පෙරබිමෙහි පවතින ක්‍රියාවලිය අනුකම්පා විරහිතව මරා දමන්න


6
"ctrl"+ "\"මා වෙනුවෙන් වැඩ කළේ නැත
බෙන්යමින් ජෆාරි

33

වැඩසටහන අත්හිටුවීමට Ctrl-Z ඔබන්න සහ එය පසුබිමට දමන්න :

Suspend the program currently running and put it in the background.
This does not stop the process as it does in VMS!

(භාවිතයෙන් නැවත පෙරබිමට ප්‍රතිස්ථාපනය කරන්න fg)

එවිට, ඔබට killහෝ kill -9එහි ක්‍රියාවලි හැඳුනුම්පත ලබා දිය හැකිය (ඔබට එය ලබා ගත හැක ps a).


13
අන්තිම පසුබිම් වැඩසටහනේ pid අඩංගු විශේෂ විචල්‍යයක් kill $!ලෙස ඔබට bash සමඟ කළ හැකිය $!.
ලොකි

Lo ලොකි මට වැඩ කරන්නේ නැත (අවම වශයෙන් විශ්වාසදායක නොවේ). bgවිචල්‍යයට අගයක් ලබා දීමට පෙර මට වරක් කළ යුතුය.
ඩැනියෙල් බෙක්

2
An ඩැනියෙල්, හරි. එය මා පැවසූ පරිදි අවසාන පසුබිම් ක්‍රියාවලිය වන බැවින් bgCtrl + Z ට පසුව එය අත්හිටුවා ඇත.
ලොකි

2
සටහන: මෙය උපක්‍රමයක් පමණක් නොවේ , එකම නමක් සහිත විවිධ ක්‍රියාදාමයන් ඔබට තිබේ නම් psප්‍රතිදානය (හෝ killall) භාවිතා කිරීම තරමක් අවදානම් වේ. ps -e -o pid,commandවැඩසටහනේ නම පමණක් නොව, වෙනස් කොට සැලකීමට නැවත ප්‍රමාණවත් නොවනු ඇත. ඊට වෙනස්ව $!ස්ථිර පහරකි.
Lloeki

1
Lo ලොකි මම එකඟ නොවෙමි. ps aමගේ පද්ධතියෙන් නිමැවුම් රේඛාව නිදර්ශනය කරන්න: එකම විධානයක ( ) 27721 s000 T 0:00.09 topඅත්හිටවූ ( T, මම) අවස්ථා topකීයක් එකම ටීටී ( s000) තුළ ක්‍රියාත්මක වේද?
ඩැනියෙල් බෙක්

13

සාමාන්යයෙන්, ඔබට තවමත් ක්රියාවලිය ( Ctrl+ Z) නතර කර භාවිතා කළ හැකිය kill -9. මක්නිසාද යත් kill -9, ඔබට මුලින්ම PID ක්‍රියාවලිය අවශ්‍ය වේ . පසුබිම් රැකියා සඳහා, kill -9 %1එය කිරීමට පහසුම ක්‍රමය - ඔබට kill ාතනය කිරීමට අවශ්‍ය පසුබිම් රැකියාව කොපමණ දැයි ඔබට විශ්වාස නැත්නම්, ධාවනය කරන්න jobs.

විකල්පයක් ලෙස, ඔබට ක්‍රියාවලි හැඳුනුම්පත සොයාගත හැකිය

ps

එවිට ඔබට ධාවනය කළ හැකිය

kill -9 <Appropriate PID from ps output>

5

Bash (සහ වෙනත් ෂෙල් වෙඩි?) සඳහා සරල විසඳුමක් වන්නේ:

Ctrl-z      followed by     kill -9 %1

'% 1' යන්නෙන් අදහස් කරන්නේ රැකියා අංකය .ාතනය වීමයි. ඔබට දැනටමත් වෙනත් රැකියා නිදාගෙන ඇත්නම් එය '% 2' (හෝ වෙනත් දෙයක්) විය හැකිය. ඔබ Ctrl-z පහර දුන් විට එය කුමන රැකියා අංකයදැයි ඔබට දැක ගත හැකිය:

[1]+  Stopped                 <process name>

'මරන්න' යනු ෂෙල්ගේ kill ාතන අනුවාදය මිස / බින් / .ාතනය නොවන බව සලකන්න.


4

1) ඔබ පුවරුවේ සහ බහු-පරිශීලක මාතයේ වේ නම්, ඔබ Ctrl-Alt-ෙල හා පිවිසුම් තවත් තිරය මත, ඔබන්න හැකි භාවිතය ps -ef | grep <myprocessname>හෝ pidof <myprocessname>පසුව අංකයෙන් මරා -9 ක්රියාවලිය.

2) ඔබ දුරස්ථව සම්බන්ධ වී ඇත්නම්, වෙනත් පර්යන්ත සැසියක් හරහා එය කරන්න.

Htop ස්ථාපනය කිරීමෙන් ඔබට ජීවිතය ටිකක් පහසු කර ගත හැකිය , එය ඉහළට වඩා බහුකාර්ය අනුවාදයක් වන අතර එමඟින් ධාවන ක්‍රියාවලීන් තෝරා බේරා ගැනීමට ඉඩ සලසයි. බොහෝ ඩිස්ට්‍රෝ වල repo එකක htop ඇත.

3) ඔබ එල්ලා තැබූ ssh සැසියක සිරවී ඇත්නම් (උදාහරණයක් ලෙස වෙනත් පද්ධතියකට), ගැලවීමේ යතුර වන ටිල්ඩ් (~) එබීමට උත්සාහ කරන්න, ඉන්පසු සත්කාරක සැසිය වෙත ආපසු යාමට CTRL-Z ඔබන්න, එවිට ඔබ හිර වී ඇති ssh ක්‍රියාවලිය විනාශ කිරීමට හෝ එය කල් ඉකුත් වන තෙක් බලා සිටිය හැක.


0

ඔබ tmux හෝ තිරය භාවිතා කරන්නේ නම් සහ ඉහත කිසිවක් ක්‍රියා නොකරන්නේ නම්, ඔබට තවමත් කවුළුව මරා දැමිය හැකිය <prefix> x, එවිට ක්‍රියාවලියද විනාශ වේ.


0

ඔබේ / etc / පැතිකඩෙහි SIGINT (2) සමඟ උගුලක් සකසා ඇත. එසේ නම්, එය ඉවත් කරන්න. ලොග්අවුට් කර නැවත ලොග් වන්න, ඔබ හොඳ විය යුතුය.

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.