มีใครบอกความแตกต่างระหว่างctrl+ zและctrl+ ได้cไหม
เมื่อฉันอยู่ในเทอร์มินัลชุดค่าผสมทั้งสองหยุดกระบวนการปัจจุบัน แต่อะไรคือความแตกต่างระหว่างทั้งสองอย่างแน่นอน
มีใครบอกความแตกต่างระหว่างctrl+ zและctrl+ ได้cไหม
เมื่อฉันอยู่ในเทอร์มินัลชุดค่าผสมทั้งสองหยุดกระบวนการปัจจุบัน แต่อะไรคือความแตกต่างระหว่างทั้งสองอย่างแน่นอน
คำตอบ:
ถ้าเราปล่อยให้กรณีขอบไปด้านหนึ่งความแตกต่างนั้นง่าย Control+ Cยกเลิกแอปพลิเคชันเกือบจะทันทีในขณะที่Control+ Zสับมันเป็นพื้นหลังถูกระงับ
เชลล์ส่งสัญญาณที่แตกต่างกันไปยังแอ็พพลิเคชันพื้นฐานในชุดค่าผสมเหล่านี้:
Control+ C(อักขระควบคุมintr
) ส่ง SIGINT ซึ่งจะขัดจังหวะแอปพลิเคชัน มักจะทำให้มันยกเลิก แต่มันขึ้นอยู่กับแอปพลิเคชันที่จะตัดสินใจ
Control+ Z(อักขระควบคุมsusp
) ส่ง SIGTSTP ไปยังแอปพลิเคชันเบื้องหน้าโดยวางไว้ในพื้นหลังอย่างมีประสิทธิภาพ สิ่งนี้มีประโยชน์หากคุณต้องการแยกบางอย่างเช่นเครื่องมือแก้ไขเพื่อไปและหยิบข้อมูลที่คุณต้องการ คุณสามารถกลับไปลงในใบสมัครโดยการเรียกใช้fg
(หรือ%x
ที่x
เป็นจำนวนงานที่แสดงในjobs
)
เราสามารถทดสอบโดยการทำงานnano TEST
แล้วกดControl+ แล้วทำงานZ ps aux | grep TEST
นี่จะแสดงให้เราเห็นว่าnano
กระบวนการยังคงทำงานอยู่:
oli 3278 0.0 0.0 14492 3160 pts/4 T 13:59 0:00 nano TEST
นอกจากนี้เราสามารถมองเห็น (จาก T ที่ซึ่งอยู่ในคอลัมน์สถานะ) ที่ผลิตตามกระบวนการได้หยุด ดังนั้นมันจึงยังมีชีวิตอยู่ แต่มันไม่ทำงาน ... สามารถกลับมาทำงานต่อได้
บางแอปพลิเคชันจะทำงานล้มเหลวหากพวกเขามีกระบวนการภายนอกที่ดำเนินอยู่ (เช่นคำขอทางเว็บ) ซึ่งอาจหมดเวลาขณะที่พวกเขากำลังหลับ
bg
(แทนfg
) เพื่อยกเลิกการระงับแอปพลิเคชันที่ได้รับ Ctrl + Z โดยไม่ต้องใส่กลับเข้าไปในเบื้องหน้า ให้คุณควบคุมทั้งเชลล์ที่เริ่มต้นแอปพลิเคชันและแอปพลิเคชันได้อย่างมีประสิทธิภาพราวกับว่าคุณใช้&
เมื่อเริ่มต้นแอปพลิเคชัน สิ่งนี้มักจะมีประโยชน์เมื่อคุณลืมที่จะเริ่มต้นด้วย&
:)
fg
อีกครั้ง!
ctrl c
หรือctrl z
? มันเป็นค่าเริ่มต้นไปที่ SID (ทุบตี)?
Control+ Zหยุดกระบวนการชั่วคราว( SIGTSTP
) และControl+ Cขัดจังหวะกระบวนการ ( SIGINT
)
http://en.wikipedia.org/wiki/Control-Z
บนระบบที่คล้าย Unix Control + Z คือการแม็พคีย์บอร์ดเริ่มต้นที่พบมากที่สุดสำหรับลำดับคีย์ที่ระงับกระบวนการ
http://en.wikipedia.org/wiki/Control-C
ในระบบ POSIX ลำดับจะทำให้โปรแกรมที่ใช้งานได้รับสัญญาณ SIGINT หากโปรแกรมไม่ได้ระบุวิธีจัดการกับเงื่อนไขนี้จะถูกยกเลิก โดยทั่วไปโปรแกรมที่จัดการกับ SIGINT จะยังคงยุติตัวเองหรืออย่างน้อยก็ยุติงานที่กำลังทำงานอยู่ภายใน
Ctrl+ Cจะใช้ในการฆ่ากระบวนการที่มีสัญญาณSIGINT
ในคำอื่น ๆ มันเป็นความสุภาพฆ่า
Ctrl+ Z ใช้เพื่อหยุดกระบวนการโดยส่งสัญญาณSIGTSTP
ซึ่งเป็นเหมือนสัญญาณสลีปที่สามารถเลิกทำได้และกระบวนการสามารถกลับมาทำงานอีกครั้งได้
แต่เมื่อกระบวนการที่ถูกระงับเราสามารถดำเนินการได้อีกครั้งโดยfg
(ประวัติส่วนตัวในหน้า) และbg
(ประวัติการทำงานในพื้นหลัง) แต่ฉันไม่สามารถกลับมาเป็นกระบวนการที่ถูกฆ่าตายที่เป็นความแตกต่างระหว่างการใช้Ctrl+ C& +CtrlZ
เราจะดูกระบวนการที่ถูกระงับได้อย่างไร
jobs
คำสั่งให้การส่งออกเช่นนี้
[1]- Stopped cat
[2]+ Stopped vi
จะฆ่ากระบวนการที่ถูกระงับเป็นเบื้องหลังได้อย่างไร
โดยใช้kill
คำสั่ง:
kill %n
โดยที่n
เป็นตัวเลขที่แสดงโดยjobs
คำสั่ง kill %1
ดังนั้นถ้าฉันต้องการที่จะฆ่าแมว:
หากต้องการใส่เพียง:
CTRL-Cการร้องขอว่าโปรแกรมยกเลิก
CTRL-Zบังคับให้โปรแกรมที่จะระงับและไปเป็นพื้นหลัง
fg
นี้ช่วยให้คุณกลับมาได้ในภายหลังมีคำสั่ง ภารกิจเบื้องหลังที่เหลืออยู่จะถูกฆ่าเมื่อคุณออกจากเชลล์การเข้าสู่ระบบ
สิ่งนี้น่าจะช่วยได้
Ctrl+ Zใช้สำหรับหยุดกระบวนการโดยส่งสัญญาณ SIGSTOP ซึ่งโปรแกรมไม่สามารถดักจับได้ ในขณะที่Ctrl+ Cถูกใช้เพื่อฆ่ากระบวนการด้วยสัญญาณ SIGINT และสามารถถูกดักโดยโปรแกรมเพื่อให้สามารถทำความสะอาดตัวมันเองก่อนที่จะออกหรือไม่ออกเลย
SIGTSTP
ซึ่งโปรแกรมสามารถจับได้ มีสี่สัญญาณที่แตกต่างกันซึ่งสามารถระงับโปรแกรมที่มีSIGSTOP
, SIGTSTP
, ,SIGTTIN
SIGTTOU
ของเหล่านั้นเท่านั้นSIGSTOP
ไม่สามารถถูกบล็อก อีกสามคนถูกใช้โดย terminal เพื่อหยุดกระบวนการภายใต้เงื่อนไขที่แตกต่างกัน
เมื่อคุณกดctrl+ cหมายความว่าคุณส่ง SIGINT ไปยังกระบวนการของคุณ เหมือนที่คุณพิมพ์คำสั่งนี้: kill -SIGINT <your_pid>
. มันจะฆ่าคุณกระบวนการของคุณ นั่นเป็นเหตุผลว่าทำไมคุณไม่เห็นมันเมื่อออกคำสั่งps
เมื่อคุณกดctrl+ zหมายความว่าคุณส่ง SIGSTOP ไปยังกระบวนการของคุณ เหมือนที่คุณพิมพ์คำสั่งนี้: kill -SIGKSTOP <your_pid>
. มันจะหยุดกระบวนการของคุณ แต่กระบวนการยังมีชีวิตอยู่ เพื่อให้คุณสามารถเปิดใช้งานกระบวนการของคุณอีกครั้งโดยส่ง SIGCONT ไปยังกระบวนการของคุณ