มีใครบอกความแตกต่างระหว่าง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 ไปยังกระบวนการของคุณ