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


คำตอบ:


153

SIGCONTสัญญาณทั้งสองได้รับการออกแบบมาเพื่อระงับกระบวนการที่จะได้รับกลับมาในที่สุดด้วย ความแตกต่างที่สำคัญระหว่างพวกเขาคือ:

  • SIGSTOPเป็นสัญญาณที่ส่งโปรแกรม (เช่นkill -STOP pid) ในขณะที่SIGTSTP(สำหรับsig NAL - T erminal หยุด ) นอกจากนี้ยังอาจถูกส่งผ่านttyคนขับโดยผู้ใช้พิมพ์บนแป้นพิมพ์ปกติ-ControlZ

  • SIGSTOPไม่สามารถละเลยได้ SIGTSTPอาจจะ.


10
Factoid: หากคุณเป็นโปรแกรมเมอร์ linux SIGTSTP คือสิ่งที่คุณจะได้รับเมื่อคุณใช้ Ctrl-Z เพื่อขัดจังหวะกระบวนการที่ทำงานในเชลล์โดยไม่ต้องฆ่ามัน ซึ่งมักจะทำให้เชลล์วางไว้ในรายการงานที่ถูกระงับ
simpleuser

@Archer ฉันไม่แน่ใจว่าจะเข้าใจความคิดเห็นของคุณ คุณหมายความว่าคุณเชื่อว่าControl-Zไม่กระตุ้นSIGTSTPหรือคุณคิดว่าไม่ควร?
jlliagre

@jlliagre ฉันทำการสำรวจอย่างใกล้ชิดและปรากฎว่าคุณพูดถูก ฉันลบความคิดเห็นก่อนหน้านี้
Archer

@Archer โอเคฉันเดาว่าคุณสับสนกับคำศัพท์ของหน้าคู่มือ terminal stopหมายถึง TSTP
jlliagre

@jlliagre ฉันต้องการ แต่ระบบไม่อนุญาตมันบอกว่าฉันสามารถยกเลิกการ
Archer

39

/usr/include/x86_64-linux-gnu/bits/signum.h

#define SIGSTOP     19  /* Stop, unblockable (POSIX).  */
#define SIGTSTP     20  /* Keyboard stop (POSIX).  */

6
ใน Solaris 10 สัญญาณถูกกำหนดไว้ในไฟล์ส่วนหัว/usr/include/sys/iso/signal_iso.h
Kent Pawar

2
ใน FreeBSD 11 อยู่ที่/usr/include/sys/signal.h
Greg Schmit

1

SIGSTOP ไม่สามารถละเลยโดยกระบวนการที่กำหนดเป้าหมายได้

ตัวอย่างที่ดีคือเครื่องเล่นวิดีโอmpvสามารถเพิกเฉยSIGTSTPได้ แต่ทำไม่ได้SIGSTOPแต่ไม่

คุณสามารถทดสอบด้วยวิดีโอที่กำลังทำงาน:

kill -SIGTSTP $(pidof mpv) และ kill -SIGSTOP $(pidof mpv)

แน่นอนkill -SIGCONT $(pidof mpv)การเล่นประวัติการทำงาน

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