ฉันจะจำศีลแอปพลิเคชันที่ทำงานอยู่ได้อย่างไร


15

ตัวอย่างกรณีการใช้งาน:

ฉันเปิด Chromium โดยเปิดแท็บไว้สองแท็บและตัดสินใจว่าฉันไม่จำเป็นต้องเข้าถึงแอปพลิเคชันในอีก 20 นาทีข้างหน้า เพื่อประหยัดเวลาแบตเตอรี่แล็ปท็อปฉันต้องการจำศีล (ตรึง) Chromium โดยไม่ต้องปิดแอปพลิเคชัน (เปิดใหม่และโหลดแท็บทั้งหมดอีกครั้งต้องใช้เวลาที่ฉันต้องการบันทึกโดยจำศีล)


1
ตรวจสอบคำตอบที่สองที่นี่: stackoverflow.com/questions/2134771/… . สิ่งนี้คือโครเมียมใช้ PID จำนวนมากและแตกต่างกันทุกครั้งที่คุณเปิด ... แต่การหยุดหลักหนึ่ง (ไอคอนที่มีไอคอนดั้งเดิมในตัวจัดการกระบวนการ) ดูเหมือนว่าจะทำงานได้ดี
GreggD

1
ถ้าคุณจะดูแลเกี่ยวกับโครเมี่ยมและไม่ได้การใช้งานอื่น ๆ ที่คุณสามารถใช้ส่วนขยายโครเมี่ยมที่ออกแบบมาสำหรับการจัดการแท็บเช่นOneTabหรือเซสชันบัดดี้
Moshe Katz

ขอบคุณ แต่ฉันหาkillallวิธีแก้ปัญหาที่สง่างามจริง ๆ :)
orschiro

คำตอบ:


21

คุณสามารถใช้killallคำสั่งเพื่อส่งSIGSTOPสัญญาณไปยังกระบวนการทั้งหมดที่ตรงกับชื่อที่กำหนดเพื่อตรึงพวกเขาและจากนั้นส่งSIGCONTวิธีเดียวกันเพื่อละลายพวกเขาอีกครั้ง

ขั้นแรกให้ค้นหาชื่อกระบวนการโดยใช้pgrep -l SEARCH_PATTERN:

$ pgrep -l chrom
13010 chromium-browse
13036 chromium-browse
13038 chromium-browse
13153 chromium-browse
13166 chromium-browse
13169 chromium-browse
13175 chromium-browse
13187 chromium-browse
13195 chromium-browse
13206 chromium-browse

โปรดทราบว่ามันจะตัดชื่อยาวดังนั้นที่rหายไป แต่นี่ไม่ใช่ปัญหาเพราะคุณสามารถใช้ความTabสมบูรณ์เพื่อป้อนชื่อกระบวนการซึ่งจะทำให้สมบูรณ์โดยอัตโนมัติ

จากนั้นคุณส่งSIGSTOPสัญญาณไปยังกระบวนการทั้งหมดที่มีชื่อchromium-browserดังนี้:

$ killall -s STOP chromium-browser 

หน้าต่าง Chromium จะเป็นสีเทาราวกับว่าไม่ตอบสนอง มันไม่ตอบสนองเลยจริง ๆ และคาดว่าจะเป็นเช่นนั้น คุณไม่สามารถโต้ตอบกับหน้าต่างได้ในทุกทาง (ยกเว้นแถบเมนูและย่อเล็กสุด ฯลฯ ซึ่งจัดการโดยตัวจัดการหน้าต่างไม่ใช่ตัวแอปพลิเคชัน) แต่กิจกรรมจากการคลิกปุ่ม ฯลฯ ยังคงถูกสร้างและเพิ่มลงในคิวเหตุการณ์ของแอปพลิเคชันดังนั้นกิจกรรมเหล่านั้นจะถูกประมวลผลทันทีเมื่อคุณละลายแอปพลิเคชันอีกครั้ง!

คุณละลายแอปพลิเคชันอีกครั้งโดยเรียกใช้คำสั่งนี้ซึ่งส่งSIGCONTสัญญาณไปยังกระบวนการที่ระบุ:

$ killall -s CONT chromium-browser 

บางครั้งการแช่แข็งแอปพลิเคชันด้วยวิธีนี้อาจทำให้แอปพลิเคชันหยุดทำงานได้ดังนั้นตรวจสอบให้แน่ใจว่าได้บันทึกสิ่งสำคัญก่อนที่จะหยุดแอปพลิเคชัน

ในบางกรณีแม้แต่สภาพแวดล้อมเดสก์ท็อป / รางหน้าต่าง / สิ่งอื่นอาจไม่ตอบสนองเช่นกัน ในกรณีนี้คุณต้องละลายแอปพลิเคชั่นที่เป็นน้ำแข็งผ่าน TTY:

กดCtrl+ Alt+ F1เพื่อเปลี่ยนเป็น TTY1 คุณจะถูกขอให้เข้าสู่ระบบดังนั้นใส่ชื่อผู้ใช้และรหัสผ่านของคุณ จากนั้นเรียกใช้คำสั่งเพื่อละลายแอปพลิเคชันในลักษณะเดียวกับที่คุณเรียกใช้ผ่านโปรแกรมจำลองเทอร์มินัลปกติของคุณ หลังจากนั้นกลับไปที่เดสก์ท็อป (TTY7) โดยใช้Ctrl+ Alt+ F7และคุณควรจะปรับอีกครั้ง


4
ตั้งแต่คุณเริ่มต้นpgrepคุณสามารถดำเนินการต่อด้วยpkill
muru

1
แม้ว่าความเสี่ยงของแอพพลิเคชั่นจะล้มเหลวSIGSTOPแต่ฉันก็บอกได้ว่ามันเป็นเรื่องเล็กน้อย ฉันมักจะใช้มันใน Chromium และฉันจำไม่ได้ว่าเป็นสาเหตุของความผิดพลาด
kasperd

ฉันได้เรียนรู้ smtg ใหม่! killall! ;-)
Fabby

8

หากต้องการระงับให้ลอง: killall -SIGTSTP chromium-browser

killall -SIGSTOP chromium-browserหากยังไม่สามารถทำงานได้ลองรุ่นพลัง:

ทั้งสองวิธีเพื่อใช้งานต่อkillall -SIGCONT chromium-browserไป ฉันลองกับ Firefox และใช้งานได้ อย่างไรก็ตามโปรดทราบว่าหากคุณคลิกปุ่มใน Chromium ในขณะที่ถูกระงับมันจะดำเนินการสิ่งนั้นเมื่อคุณดำเนินการต่อ


3
SIGSTOP / SIGCONT ใช้งานได้สำหรับฉันเพียงแค่ป้อนchromium-browserเป็นชื่อกระบวนการ +1
GreggD

1
หรือgoogle-chromeถ้าคุณใช้ Google Chrome เนื่องจากความแตกต่างนั้นทำให้สับสน
cat

2

คุณสามารถลองต่อไปนี้ (ในเทอร์มินัล):

ps aux | grep gedit

จากนั้นคุณจะเห็นสิ่งนี้:

barend    7166  5.3  1.0 722620 39044 ?        Sl   16:19   0:00 gedit

เขียนหมายเลข 7166 (หรือหมายเลขใดก็ได้) จากนั้นทำ:

kill -STOP 7166

ที่จะระงับการดำเนินการตามกระบวนการ มันจะไม่เพิ่มหน่วยความจำที่ใช้ทันที แต่หน่วยความจำจะพร้อมใช้งานสำหรับกระบวนการอื่นหากพวกเขาต้องการ

จากนั้นทำ

kill -CONT 7166 เพื่อทำงานกับโปรแกรมอีกครั้ง

โปรดทราบว่าคุณต้องเปลี่ยน 7166 ตามความเหมาะสม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.