อะไรคือความแตกต่างระหว่าง "งาน" และ "กระบวนการ"?
อะไรคือความแตกต่างระหว่าง "งาน" และ "กระบวนการ"?
คำตอบ:
กระบวนการคือโปรแกรมใด ๆ ที่ทำงานด้วยพื้นที่ที่อยู่ของตัวเอง
งานคือแนวคิดที่ใช้โดยเชลล์ - โปรแกรมใด ๆ ที่คุณเริ่มทำงานแบบไม่โต้ตอบ (เช่นไม่ใช่ daemon) คืองาน หากคุณใช้งานโปรแกรมแบบโต้ตอบคุณสามารถกดCtrlZเพื่อหยุดการทำงานชั่วคราว จากนั้นคุณสามารถเริ่มต้นใหม่ในเบื้องหน้า (โดยใช้fg
) หรือในพื้นหลัง (โดยใช้bg
)
ในขณะที่โปรแกรมถูกหยุดชั่วคราวหรือทำงานในพื้นหลังคุณสามารถเริ่มโปรแกรมอื่น - จากนั้นคุณจะมีงานสองงาน นอกจากนี้คุณยังสามารถเริ่มต้นโปรแกรมที่ทำงานในพื้นหลังโดยการผนวกเป็น "&" program &
เช่นนี้ โปรแกรมนั้นจะกลายเป็นงานพื้นหลัง jobs
รายการทั้งหมดงานที่คุณกำลังทำงานคุณสามารถใช้
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับงานดูหัวข้อนี้ของหน้า bash man
ls | sort
เป็นงาน แต่แต่ละคำสั่งทำงานเป็นกระบวนการลูกของกระบวนการ subshell ที่แตกต่างกัน นี่เป็นตัวอย่างของงานที่ประกอบด้วยหลายกระบวนการ คำจำกัดความของงานอธิบายได้อย่างไรว่างานสามารถประกอบด้วยหลายกระบวนการได้?
UNIX มีแนวคิด "กระบวนการ", "กลุ่มกระบวนการ" และ "เซสชัน" แยกต่างหาก
แต่ละเชลล์ที่คุณได้รับเมื่อเข้าสู่ระบบจะเป็นผู้นำของเซสชันและกลุ่มกระบวนการใหม่ของตนเองและตั้งค่ากลุ่มกระบวนการควบคุมของเทอร์มินัลเป็นของตัวเอง
เชลล์สร้างกลุ่มกระบวนการภายในเซสชันปัจจุบันสำหรับ "job" แต่ละตัวที่เปิดใช้และวางแต่ละกระบวนการที่เริ่มในกลุ่มกระบวนการที่เหมาะสม ตัวอย่างเช่นls | head
เป็นไพพ์ไลน์ของสองกระบวนการซึ่งเชลล์พิจารณางานเดียวและจะอยู่ในกลุ่มกระบวนการใหม่กลุ่มเดียว
กระบวนการคือเธรด (ของการดำเนินการ) และบริบทอื่น ๆ เช่นพื้นที่ที่อยู่และตารางตัวให้คำอธิบายไฟล์ กระบวนการอาจเริ่มกระบวนการอื่น ๆ กระบวนการใหม่เหล่านี้จะอยู่ในกลุ่มกระบวนการเดียวกันกับผู้ปกครองเว้นแต่จะมีการดำเนินการอื่น แต่ละกระบวนการอาจมี "เทอร์มินัลการควบคุม" ซึ่งเริ่มต้นด้วยเช่นเดียวกันกับพาเรนต์
เชลล์มีแนวคิดของงาน "เบื้องหน้า" และงาน "พื้นหลัง" งานเบื้องหน้าคือกลุ่มกระบวนการที่มีการควบคุมเทอร์มินัลและงานแบ็คกราวน์เป็นกลุ่มกระบวนการโดยไม่มีการควบคุมเครื่อง
แต่ละเทอร์มินัลมีกลุ่มกระบวนการพื้นหน้า เมื่อนำงานไปที่พื้นหน้าเชลล์จะตั้งค่าให้เป็นกลุ่มกระบวนการพื้นหน้าของเทอร์มินัล เมื่อวางงานไว้ที่พื้นหลังเชลล์จะกำหนดกลุ่มกระบวนการพื้นหน้าของเทอร์มินัลให้กับกลุ่มกระบวนการอื่นหรือตัวมันเอง
กระบวนการอาจอ่านและเขียนไปยังเทอร์มินัลการควบคุมหากอยู่ในกลุ่มกระบวนการพื้นหน้า มิฉะนั้นพวกเขาจะได้รับSIGTTIN
และSIGTTOU
ส่งสัญญาณเกี่ยวกับความพยายามในการอ่านและเขียนจากเทอร์มินัลตามลำดับ โดยค่าเริ่มต้นสัญญาณเหล่านี้จะระงับกระบวนการแม้ว่าเชลล์ส่วนใหญ่จะปิดบังSIGTTOU
เพื่อให้งานพื้นหลังสามารถเขียนไปยังเทอร์มินัลได้อย่างต่อเนื่อง
ในการคำนวณงานคือหน่วยของงานหรือหน่วยปฏิบัติการ (ที่ทำงานดังกล่าว) ส่วนประกอบของงาน (เป็นหน่วยของงาน) เรียกว่างานหรือขั้นตอน (ถ้าเรียงตามลำดับเช่นเดียวกับในกระแสงาน) ในฐานะที่เป็นหน่วยของการดำเนินการงานอาจถูกระบุอย่างชัดเจนพร้อมกับกระบวนการเดียวซึ่งอาจมีกระบวนการย่อย (กระบวนการลูกกระบวนการที่สอดคล้องกับงานเป็นกระบวนการหลัก) ซึ่งดำเนินงานหรือขั้นตอนที่ประกอบด้วยงานของ งาน; หรือกับกลุ่มกระบวนการ หรือมีการอ้างอิงที่เป็นนามธรรมไปยังกระบวนการหรือกลุ่มกระบวนการเช่นเดียวกับในการควบคุมงาน Unix
คำจำกัดความข้างต้นเป็นเรื่องทางเทคนิคมาก แต่บางที op ต้องการคำชี้แจงเพิ่มเติมแบบวันต่อวัน ฉันคิดว่างานเป็นกระบวนการที่กำหนดไว้ เมื่อเราจัดการกับกระบวนการโดยทั่วไปไม่จำเป็นต้องมีความคิดเรื่องกำหนดการ แต่เมื่อเราใช้คำว่า "job" เรามักจะหมายถึงว่ามันถูกกำหนดเวลาไว้หรือทำซ้ำเหมือนวนวนมันเป็นเหมือนคนงาน