หยุดล้มเหลว
ปรากฏการณ์:
เมื่อรัน php start.php stop จะมีข้อความ提示ว่า stop fail
ความเป็นไปได้ที่หนึ่ง
มีเงื่อนไขว่า workerman ถูกเริ่มต้นในโหมด debug และนักพัฒนากด ctrl z ในเทอร์มินัลเพื่อส่งสัญญาณ SIGSTOP ให้กับ workerman ทำให้ workerman เข้าไปอยู่ในพื้นหลังและถูกระงับ (pause) จึงไม่สามารถตอบสนองต่อคำสั่งหยุด (SIGINT สัญญาณ).
การแก้ไข:
ให้พิมพ์ fg ในเทอร์มินัลที่ใช้เริ่มต้น workerman (ส่งสัญญาณ SIGCONT แล้วกด Enter) จะทำให้ workerman กลับมาทำงานในพื้นหน้า จากนั้นให้กด ctrl c (ส่งสัญญาณ SIGINT ) เพื่อหยุด workerman.
หากไม่สามารถหยุดได้ ให้ลองรันคำสั่งต่อไปนี้สองคำสั่ง
killall -9 php
ps aux|grep -i workerman|awk '{print $2}'|xargs kill -9
ความเป็นไปได้ที่สอง
ผู้ใช้ที่รันคำสั่งหยุดไม่ตรงกับผู้ใช้ที่เริ่มต้น workerman นั่นคือผู้ใช้ที่หยุดไม่มีสิทธิ์ในการหยุด workerman.
การแก้ไข:
ให้สลับไปยังผู้ใช้ที่เริ่มต้น workerman หรือใช้ผู้ใช้ที่มีสิทธิ์สูงกว่าในการหยุด workerman.
ความเป็นไปได้ที่สาม
ไฟล์ pid ของกระบวนการหลักของ workerman ถูกลบไป ทำให้สคริปต์ไม่สามารถหากระบวนการ pid ได้ จึงทำให้การหยุดล้มเหลว.
การแก้ไข:
ให้บันทึกไฟล์ pid ในตำแหน่งที่ปลอดภัย ดูรายละเอียดในคู่มือWorker::$pidFile。
ความเป็นไปได้ที่สี่
ไฟล์ pid ของกระบวนการหลักของ workerman อาจไม่ตรงกับกระบวนการ workerman.
การแก้ไข:
เปิดไฟล์ pid ของกระบวนการหลักของ workerman เพื่อตรวจสอบ pid ของกระบวนการหลัก ไฟล์ pid จะถูกเก็บไว้ในไดเรกทอรีที่อยู่ข้างเคียงกับ Workerman โดยค่าเริ่มต้น รันคำสั่ง ps aux | grep กระบวนการหลัก pid เพื่อตรวจสอบว่ากระบวนการที่ตรงนั้นเป็นกระบวนการของ Workerman หรือไม่ หากไม่ใช่ อาจจะเป็นเพราะเซิร์ฟเวอร์รีสตาร์ท ทำให้ pid ที่ workerman เก็บไว้นั้นเป็น pid ที่หมดอายุ และ pid นี้อาจถูกกระบวนการอื่นใช้งาน ทำให้การหยุดล้มเหลว ในกรณีนี้ให้ลบไฟล์ pid นั้นไป.
ความเป็นไปได้ที่ห้า
ติดตั้ง grpc extension แต่ไม่ได้ตั้งค่าตัวแปรสภาพแวดล้อมสำหรับ grpc extension ส่งผลให้เกิดการฟอร์คกระบวนการที่จะถูกติดตั้งขึ้นมากมายในการเริ่มต้น ซึ่งจะทำให้การหยุดล้มเหลว.