หยุดไม่สำเร็จ

อาการ:

รัน php start.php stop แล้วขึ้นข้อความ stop fail

กรณีที่ 1

การรัน workerman ในโหมด debug และผู้พัฒนากด ctrl z ใน terminal ซึ่งทำให้ workerman ได้รับสัญญาณ SIGSTOP และเข้าสู่โหมดพัก (suspend) ทำให้ไม่สามารถตอบสนอง stop คำสั่งได้ (รับสัญญาณ SIGINT)

การแก้ไข:
ใน terminal ที่รัน workerman ให้พิมพ์ fg (ส่งสัญญาณ SIGCONT) และกด Enter เพื่อย้าย workerman กลับมาทำงานหน้าจอหลัก จากนั้นกด ctrl c (ส่งสัญญาณ SIGINT) เพื่อหยุด workerman

ถ้าหยุดไม่ได้ ลองรันคำสั่งดังนี้
killall -9 php
ps aux|grep -i workerman|awk '{print $2}'|xargs kill -9

กรณีที่ 2

ผู้ใช้ที่รันคำสั่ง stop และผู้ใช้ที่สั่งให้ workerman เริ่มทำงานไม่เหมือนกัน ซึ่งหมายความว่าผู้ใช้ที่ stop ไม่มีสิทธิ์ในการหยุด workerman

การแก้ไข:
เปลี่ยนไปใช้ผู้ใช้ที่รัน workerman หรือใช้ผู้ใช้ที่มีสิทธิ์สูงกว่าในการหยุด workerman

กรณีที่ 3

ไฟล์ pid ของกระบวนการหลักของ workerman ถูกลบทำให้สคริปต์ไม่พบ pid ของกระบวนการ ทำให้หยุดไม่สำเร็จ

การแก้ไข:
บันทึกไฟล์ pid ไว้ในที่ปลอดภัย ดูรายละเอียดได้ที่Worker::$pidFile

กรณีที่ 4

ไฟล์ pid ของกระบวนการหลักของ workerman ไม่ตรงกับกระบวนการของ workerman

การแก้ไข:
เปิดไฟล์ pid ของกระบวนการหลักของ workerman เพื่อดู pid ของกระบวนการหลัก ไฟล์ pid ที่ไว้ค่าเริ่มต้นอยู่ในโฟลเดอร์เดียวกันกับ Workerman จากนั้นรันคำสั่ง ps aux | grep 主进程pid เพื่อตรวจสอบว่ากระบวนการที่ตรงกันกับ Workerman หรือไม่ หากไม่ตรงกัน อาจจะเกิดจากการรีสตาร์ทเซิร์ฟเวอร์ทำให้ pid ที่ workerman บันทึกไว้มีค่าเก่าและถูกใช้โดยกระบวนการอื่น ๆ หากอยู่ในกรณีนี้ ลบไฟล์ pid ทิ้งก็จะทำให้บันทึก pid ใหม่ได้

กรณีที่ 5

ติดตั้งส่วนขยาย grpc แต่ไม่ได้ตั้งค่าตัวแปรสภาพแวดล้อมที่เกี่ยวข้อง ทำให้ในขณะเริ่มต้น มีกระบวนการซ้อนทับออกมา และทำให้หยุดไม่สำเร็จ