שאלה איך אני יכול להרוג את כל העבודות הפסיקו?


כאשר אני מנסה לצאת משרת לינוקס אני מקבל את ההודעה:

ישנן עבודות עצורות.

: האם יש פקודה אחת להרוג אותם?


80
2018-02-25 10:07




דוגמאות נוספות בשאלות ותשובות: unix.stackexchange.com/questions/124428/... - slm
היתה לי בעיה הפוכה עכשיו, זה לא היה להזהיר על עצר משרות כאשר אני עוזב את הקליפה! היה צריך לשים shopt -s checkjobs ב .bashrc שלי - Sam Watkins
הקש ctrl + d שוב, הוא יאפשר לך לצאת עכשיו, להרוג את העבודות האלה בתהליך - Jens Timmerman


תשובות:


כדי להרוג במהירות את כל העבודות פועל מתחת bash, הזן:

kill `jobs -ps`

jobs -ps מזהה תהליך רשימה של עבודות הפסיק. kill `jobs -ps` לשלוח אות TERM לכל העבודות הפסיקו.


69
2018-02-25 10:15



°I "יש - Tibor
לא עבד כאשר העבודה היתה "sudo su". כלומר sudo kill `jobs -p` עבודה אך לא הקלדת PID עשה. - user13107
למה זה upvoted כל כך? זה שגוי. אם התהליכים נעצרים, אז a kill כגון זה לא יעשה כלום, מאז התהליכים נעצרים, הם לא יעבד את SIGTERM (-15) שנשלח אליהם כברירת מחדל. - slm
להרוג -9 יעשה את העבודה. - Blossoming_Flower
התשובה שגויה בהחלט! - mrangry777


נסה להקליד את זה:

kill -9 $(jobs -p)

76
2018-02-25 10:14



זה צריך לעשות את זה, אבל אני חושב שהוא צריך לשלוח הראשון SIGTERM (-15) לפני שליחת SIGKILL (-9). אז אולי מציע משהו כמו "להרוג $ (משרות -P), 3s שינה, להרוג -9 $ (משרות -p)" יהיה טוב יותר. שליחת SIGTERM הראשון העבודות עשוי להיות מסוגל לעשות יציאה נקי (שחרור משאבים שהוקצו, וכו '). - rems
קווין דיוק, התשובה שלך היא זו שעבדה בשבילי. אני לא יכול להצביע כי אין לי 15 מוניטין. kill -9 $ (jobs -p)
@rems למעט, כפי שציין slm החוצה, הם לא מקבלים את SIGTERM כי הם עצרו. - Paul Gear
לא עובד על. עקב zsh לא להיות קופה  IX תואם עבודות. - Max Coplan


התשובה המקובלת היתה הורגת את כל העבודות (וזה מספיק במקרה זה) ולא רק את אלה שנעצרו. אם אתה רוצה להרוג רק את אלה להפסיק, להפעיל:

kill $(jobs -l | grep Stopped | cut -d' ' -f3)

16
2018-03-08 18:04



grep / לחתוך ניתן לשלב פקודה אחת awk: awk '/Stopped/{print $3}') - laebshade
ה -s הטיעון על מסננים התשובה המקובלת רק אלה נעצרו - 79E09796


הדרך הקלה ביותר היא פשוט לנסות מיד את היציאה; bash ייקח את זה אומר "להרוג את כל העבודות עצר ולצאת".


12
2018-03-08 18:13



זה ישלח HUP אשר לא בהכרח לעצור את כל העבודות. - Stephen Niedzielski


for x in `jobs -p` ; do kill -9 $x ; done

7
2018-02-26 10:22



אתה יכול להוסיף עיצוב קוד עבור שורה זו כדי להקל על הקריאה. - drcelus
אתה יכול להסתכל על העיצוב שלך שוב - להשתמש ארבעה רווחים בתחילת השורה כדי לסמן בלוק כמו קוד (ולא באמצעות backtick). כרגע לא ברור אם אתה משתמש backticks בקוד שלך, או מנסה להציג קוד באמצעות backticks. - dunxd
העיצוב הוא בסדר. אנחנו צריכים לעבור את העבודות -p באמצעות backticks אחר זה רגיל לשקול כפקודה, וזה יהיה לזרוק שגיאה. - monu


אם אתה רוצה להסיר כמה עבודות עצור אבל לא כל, נסה את זה:

ראשית, רשימת עבודות, תקבל משהו כזה:

$ jobs -l

[2]   4813 Stopped                 ./parse < call.txt
[3]-  4819 Stopped                 ./parse < call.txt

לשלוח להרוג לעבודה נעצר, זה יעשה דבר מלבד התור מאשר להביא אותו בחזית, זה יסיים

$ fg %2
./parse < call.txt
Terminated

$ jobs -l
[3]-  4819 Stopped                 ./parse < call.txt

4
2018-05-30 04:16





בדרך כלל אם יש לך את ההודעה, אתה צריך להתנתק פעמיים. למשל ראשון Ctrl + D נותן לך את הודעת האזהרה כדי ליידע אותך על משרות עצר, לחיצה בפעם השנייה יהיה לרשום אותך להרוג את העבודות. כך גם לגבי logout ו exit פקודות.

כדי להרוג אותם באופן ידני, נסה: kill $(jobs -p).


אם אתה לא רוצה להרוג מקומות עבודה מן הפגז הנוכחי שלך, אתה יכול להסיר אותם מהטבלה של עבודות פעיל מבלי להרוג באמצעות disown פקודה. למשל

$ sleep 1000 &
[1] 19404
$ jobs
[1]+  Running                 sleep 1000 &
$ disown

ניתן להפסיק את העבודות הפסיקו גם את מצב התהליך (T אופי) כלומר התהליך הופסק על ידי אות כגון SIGSTOP, SIGTSTP או אחרים (כמו SIGTTIN, או SIGTTOU).

במקרה מתי jobs פקודה shellin shell אינו זמין, תהליכים עצורים יכולים להיות רשומים על ידי הפקודה הבאה:

ps wuax | awk '$8 ~ "T"'

כדי להרוג את כולם, אתה יכול בעצם להקליד:

kill -9 $(ps wuax | awk 'NR>1 && $8 ~ "T" {print $2}')

הנה מבחן פשוט:

$ sleep 1000 &
[1] 2014
$ sleep 1000 &
[2] 2015
$ sleep 1000 &
[3] 2016
$ sleep 1000 &
[4] 2017
$ killall -STOP sleep
[1]   Stopped                 sleep 1000
[2]   Stopped                 sleep 1000
[3]   Stopped                 sleep 1000
[4]   Stopped                 sleep 1000
$ ps wuax | awk '$8 ~ "T"'
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
vagrant   2014  0.0  0.0   7228   832 pts/0    T    20:38   0:00 sleep 1000
vagrant   2015  0.0  0.0   7228   708 pts/0    T    20:38   0:00 sleep 1000
vagrant   2016  0.0  0.0   7228   760 pts/0    T    20:38   0:00 sleep 1000
vagrant   2017  0.0  0.0   7228   828 pts/0    T    20:38   0:00 sleep 1000
$ kill -9 $(awk 'NR>1 && $8 ~ "T" {print $2}' <(ps wuax))
$ jobs
[1]   Killed                  sleep 1000
[2]   Killed                  sleep 1000
[3]   Killed                  sleep 1000
[4]   Killed                  sleep 1000

4
2018-02-19 20:46