ความแตกต่างระหว่างงานและกระบวนการคืออะไร?


คำตอบ:


46

กระบวนการคือโปรแกรมใด ๆ ที่ทำงานด้วยพื้นที่ที่อยู่ของตัวเอง

งานคือแนวคิดที่ใช้โดยเชลล์ - โปรแกรมใด ๆ ที่คุณเริ่มทำงานแบบไม่โต้ตอบ (เช่นไม่ใช่ daemon) คืองาน หากคุณใช้งานโปรแกรมแบบโต้ตอบคุณสามารถกดCtrlZเพื่อหยุดการทำงานชั่วคราว จากนั้นคุณสามารถเริ่มต้นใหม่ในเบื้องหน้า (โดยใช้fg) หรือในพื้นหลัง (โดยใช้bg)

ในขณะที่โปรแกรมถูกหยุดชั่วคราวหรือทำงานในพื้นหลังคุณสามารถเริ่มโปรแกรมอื่น - จากนั้นคุณจะมีงานสองงาน นอกจากนี้คุณยังสามารถเริ่มต้นโปรแกรมที่ทำงานในพื้นหลังโดยการผนวกเป็น "&" program &เช่นนี้ โปรแกรมนั้นจะกลายเป็นงานพื้นหลัง jobsรายการทั้งหมดงานที่คุณกำลังทำงานคุณสามารถใช้

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับงานดูหัวข้อนี้ของหน้า bash man


ในตัวอย่างข้างต้นเมื่อเรามี2 งานที่กำลังทำงานอยู่เราก็มีกระบวนการทำงาน 2 กระบวนการใช่ไหม? คุณช่วยอธิบายความหมายของพื้นที่ที่อยู่ของตัวเองได้ไหม? ในกรณีที่โปรแกรมไม่มีพื้นที่ที่อยู่ของตัวเอง?
Kenny

@ เคนนี่ใช่งาน tro เหล่านั้นก็จะเป็นกระบวนการ ในความเป็นจริงทุกงานเป็นกระบวนการ งานเกี่ยวข้องกับเซสชันของคุณเธอจะ ทุกกระบวนการที่คุณเริ่มต้นซึ่งไม่ได้แยกออกจาก tty ของคุณนั้นเป็นงาน
Shawn J. Goff

@ เคนนี่เท่าที่กระบวนการเมื่อฉันพูดโปรแกรมนั่นเป็นสิ่งที่ทั่วไปมาก - ชุดของคำสั่งที่สั่งให้ CPU ดำเนินการ สิ่งนี้เรียกว่าภารกิจหรือเธรดของการเรียกใช้งาน กระบวนการอาจสร้างเธรดอื่นที่แชร์พื้นที่ที่อยู่
Shawn J. Goff

1
คำสั่ง piped เช่น in ls | sortเป็นงาน แต่แต่ละคำสั่งทำงานเป็นกระบวนการลูกของกระบวนการ subshell ที่แตกต่างกัน นี่เป็นตัวอย่างของงานที่ประกอบด้วยหลายกระบวนการ คำจำกัดความของงานอธิบายได้อย่างไรว่างานสามารถประกอบด้วยหลายกระบวนการได้?
ทิม

30

UNIX มีแนวคิด "กระบวนการ", "กลุ่มกระบวนการ" และ "เซสชัน" แยกต่างหาก

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

เชลล์สร้างกลุ่มกระบวนการภายในเซสชันปัจจุบันสำหรับ "job" แต่ละตัวที่เปิดใช้และวางแต่ละกระบวนการที่เริ่มในกลุ่มกระบวนการที่เหมาะสม ตัวอย่างเช่นls | headเป็นไพพ์ไลน์ของสองกระบวนการซึ่งเชลล์พิจารณางานเดียวและจะอยู่ในกลุ่มกระบวนการใหม่กลุ่มเดียว

กระบวนการคือเธรด (ของการดำเนินการ) และบริบทอื่น ๆ เช่นพื้นที่ที่อยู่และตารางตัวให้คำอธิบายไฟล์ กระบวนการอาจเริ่มกระบวนการอื่น ๆ กระบวนการใหม่เหล่านี้จะอยู่ในกลุ่มกระบวนการเดียวกันกับผู้ปกครองเว้นแต่จะมีการดำเนินการอื่น แต่ละกระบวนการอาจมี "เทอร์มินัลการควบคุม" ซึ่งเริ่มต้นด้วยเช่นเดียวกันกับพาเรนต์

เชลล์มีแนวคิดของงาน "เบื้องหน้า" และงาน "พื้นหลัง" งานเบื้องหน้าคือกลุ่มกระบวนการที่มีการควบคุมเทอร์มินัลและงานแบ็คกราวน์เป็นกลุ่มกระบวนการโดยไม่มีการควบคุมเครื่อง

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

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


1
นี่เป็นภาพรวมที่ดีและรัดกุมของการจัดการกระบวนการเชลล์และเทอร์มินัล มันสามารถปรับปรุงได้โดยการกล่าวถึงว่า "งาน" เป็น "ขั้นตอน" ซึ่งสามารถเชื่อมต่อได้มากกว่าหนึ่งกระบวนการในกลุ่มกระบวนการ
Chris Page

1

ในการคำนวณงานคือหน่วยของงานหรือหน่วยปฏิบัติการ (ที่ทำงานดังกล่าว) ส่วนประกอบของงาน (เป็นหน่วยของงาน) เรียกว่างานหรือขั้นตอน (ถ้าเรียงตามลำดับเช่นเดียวกับในกระแสงาน) ในฐานะที่เป็นหน่วยของการดำเนินการงานอาจถูกระบุอย่างชัดเจนพร้อมกับกระบวนการเดียวซึ่งอาจมีกระบวนการย่อย (กระบวนการลูกกระบวนการที่สอดคล้องกับงานเป็นกระบวนการหลัก) ซึ่งดำเนินงานหรือขั้นตอนที่ประกอบด้วยงานของ งาน; หรือกับกลุ่มกระบวนการ หรือมีการอ้างอิงที่เป็นนามธรรมไปยังกระบวนการหรือกลุ่มกระบวนการเช่นเดียวกับในการควบคุมงาน Unix

แหล่ง

ตัวอย่างที่ดี


-1

คำจำกัดความข้างต้นเป็นเรื่องทางเทคนิคมาก แต่บางที op ต้องการคำชี้แจงเพิ่มเติมแบบวันต่อวัน ฉันคิดว่างานเป็นกระบวนการที่กำหนดไว้ เมื่อเราจัดการกับกระบวนการโดยทั่วไปไม่จำเป็นต้องมีความคิดเรื่องกำหนดการ แต่เมื่อเราใช้คำว่า "job" เรามักจะหมายถึงว่ามันถูกกำหนดเวลาไว้หรือทำซ้ำเหมือนวนวนมันเป็นเหมือนคนงาน


1
กรุณาอธิบายการลงคะแนนหากคุณต้องการที่จะลงคะแนน หากคำตอบนี้ไม่ถูกต้องอย่างน้อยอธิบายว่าทำไมคุณคิดว่าคำตอบนั้นไม่ถูกต้อง จนถึงตอนนี้ฉันยังคิดว่าคำตอบของฉันเหมาะสมแล้วมันเป็นคำอธิบายที่ฉันกำลังมองหา
eloone

ฉันยอมรับว่าคนที่ลงคะแนนควรอธิบายว่าทำไม แต่ฉันคิดว่าเหตุผลของ downvote ก็คือคำจำกัดความของคุณของ "งาน" นั้นไม่ถูกต้อง
prograde

สนใจที่จะอธิบายว่าทำไมมันไม่ถูกต้อง? "งาน" ไม่ได้กำหนดไว้อย่างชัดเจนเช่นเดียวกับ "กระบวนการ" คืออะไร (โดยมี PID ในระบบ) จากประสบการณ์ "งาน" ของฉันมักจะเป็นคำที่ใช้ในการกำหนดกระบวนการบางอย่างที่มักจะกำหนดไว้และในพื้นหลังและคุณสามารถเปิดใช้งานได้ จึงเป็นเรื่องยากที่จะกำหนดเพราะการใช้งานกำหนดไว้ มันอาจเป็นกลุ่มของกระบวนการ แต่เป็น "คอนเทนเนอร์" (LXC) แต่ "คอนเทนเนอร์" ไม่ใช่ "งาน" กระบวนการที่เรียกใช้เช่น "nginx" ไม่ใช่ "งาน" เช่นกัน ความคิดเห็นของฉันยังคงเพิ่ม sth ให้กับคำตอบ อีกครั้งมันตอบสิ่งที่ฉันพยายามเข้าใจ
eloone

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