กระบวนการหยุดใน linux คืออะไร?


12

ดังนั้นฉันจึงมีสคริปต์ PHP บางตัวที่ทำงานจากบรรทัดคำสั่งและต้องการหยุดพวกเขาทำงาน

ฉันวิ่ง

$ ps aux | grep php
$ sudo kill 8754
$ sudo kill 8767

จากนั้นก็วิ่ง

$ ps aux | grep php

อีกครั้งเพื่อตรวจสอบกระบวนการได้ยกเลิก แต่ได้ผลลัพธ์ประเภทนี้:

jon      8754  0.4 53.5 3044256 2205204 ?     T    10:34   0:15 php awesome_script.php
jon      8767  0.4 53.5 3044256 2205204 ?     T    10:34   0:15 php awesome_script.php
jon     12275  0.0  0.0   4156   892 pts/1    S+   11:27   0:00 grep --color=auto php

ฉันค้นหาความหมายของ Tในคอลัมน์สถานะและค้นพบว่ามันหมายถึงการหยุดทำงาน แต่ฉันไม่เข้าใจว่านั่นหมายถึงกระบวนการกำลังทำอะไร

ฉันรู้ว่าคุณสามารถสร้างการจัดการสัญญาณของคุณเองใน PHP แต่ฉันไม่ได้ทำอย่างนั้นดังนั้นเมื่อ PHP ได้รับสัญญาณ SIGTERMมันจะทำอย่างไร?

กระบวนการหยุดทำคืออะไร (ถ้ามี)

คำตอบ:


15

มันหมายถึงกระบวนการได้รับSTOPสัญญาณและจะไม่ทำอะไรมากจนกว่าจะได้รับCONTสัญญาณแม้จะไม่สิ้นสุด

แหล่งที่มาของSTOPสัญญาณที่พบมากที่สุดคือผู้ใช้กดปุ่ม^zในขณะที่กระบวนการอยู่เบื้องหน้าและวิธีทั่วไปในการส่งCONTต่อมาคือการพิมพ์fgหรือbgที่ดำเนินการต่อในพื้นหน้าและพื้นหลังตามลำดับ

อีกวิธีหนึ่งที่จะส่งไปยังขั้นตอนคือSTOP kill -STOP $pidในทำนองเดียวกันสามารถส่งไปยังกระบวนการที่มีCONTkill -CONT $pid

เมื่อคุณส่งTERMสัญญาณไปยังกระบวนการฉันคิดว่าคุณต้องการให้ยุติ เพื่อที่จะเกิดขึ้นกระบวนการจะต้องรับCONTสัญญาณ คุณสามารถส่งสิ่งเหล่านั้นด้วยการพิมพ์kill -CONT 8754 8767ในหน้าต่างเทอร์มินัล


การส่งสัญญาณ CONT จะอนุญาตให้สคริปต์ทำงานจนกว่าจะเสร็จสมบูรณ์หรือไม่ หรือมันจะทำให้สคริปต์ยุติทันทีหรือไม่
Jon

กระบวนการจะดำเนินการต่อในสิ่งที่มันทำ (ก่อนที่จะหยุด) เมื่อได้รับ CONT หากคุณส่ง TERM (โดยkill $pidตัวอย่าง) ในขณะที่มันถูกหยุดอย่างไรก็ตามมันจะตอบสนองต่อ TERM นั้นและจะสิ้นสุดลง
Eroen

อืมดังนั้นฉันส่ง TERM โดยเรียกใช้kill 8754ซึ่งควรทำให้กระบวนการยุติลงในที่สุดใช่ไหม คุณรู้หรือไม่ว่ากระบวนการใดที่จะเกิดขึ้นในขณะที่กำลังจะมีการยกเลิก? ระบุว่ากระบวนการเข้าสู่สถานะ STOP ราวกับว่าได้รับสัญญาณ STOP จากkill -STOP 8754นั่นอาจเกิดขึ้นได้ถ้ามันส่งสัญญาณ TERM
Jon

กระบวนการที่หยุดจะไม่ยุติลงเนื่องจากTERMสัญญาณจนกว่าจะดำเนินการต่อ มันจะยุติทันทีหากได้รับKILLสัญญาณแม้ในขณะที่หยุด ฉันคิดว่ากระบวนการจะอยู่ในสถานะ Run เมื่อยุติ ฉันไม่ค่อยคุ้นเคยกับ PHP มากนักและไม่รู้จะบอกได้อย่างไรว่าทำไมกระบวนการจึงหยุดขอโทษ โดยทั่วไปแม้ว่ากระบวนการไม่ได้หยุด TERMแต่ยุติเมื่อพวกเขาได้รับ
Eroen

4

กระบวนการหยุดใน Linux / Unix เป็นกระบวนการ / งานที่ได้รับสัญญาณหยุด ( SIGSTOP/ SIGTSTP) ซึ่งบอกเคอร์เนลที่จะไม่ทำการประมวลผลใด ๆ กับมันหยุดแล้วและมันจะสามารถดำเนินการต่อถ้ามันส่งSIGCONTสัญญาณ

กระบวนการที่หยุดทำงานโดยทั่วไปจะรอสัญญาณต่อเนื่องจากเคอร์เนลเช่นเดียวกันกับกระบวนการที่ถูกระงับรอสถานะการปลุกจากเคอร์เนล

สถานะกระบวนการเคอร์เนล Linux: พร้อมทำงาน, หยุด, หยุดชั่วคราว, ติดตาม, Zombie

เครดิตรูปภาพ: polytechnique.fr


แต่ละกระบวนการในเคอร์เนล Linux แสดงโดยtask_structโครงสร้างข้อมูลและแต่ละtaskเวกเตอร์ประกอบด้วยอาร์เรย์ของพอยน์เตอร์สำหรับทุกtask_structๆ ซึ่งอธิบายถึงกระบวนการหรืองานในระบบ (ทั้งมันunrunnable, runnableหรือstopped) โปรดดู: กระบวนการและโครงสร้างข้อมูล Linux ) สำหรับรายละเอียดเพิ่มเติม

ดูเพิ่มเติมที่: เคอร์เนล Linux: การจัดการกระบวนการ


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