रोकना विफल

घटना:

चलाया php start.php stop提示 stop fail

पहली संभावना

शर्त यह है कि workerman को debug तरीके से शुरू किया गया है, डेवलपर ने टर्मिनल में ctrl z दबाकर workerman को SIGSTOP सिग्नल भेजा है, जिससे workerman बैकग्राउंड में चला गया और निलंबित (pause) हो गया, इसलिए stop कमांड(SIGINT सिग्नल) का उत्तर नहीं दे सकता।

समाधान:
workerman को शुरू करने वाले टर्मिनल में fg टाइप करें (SIGCONT सिग्नल भेजकर) और फिर एंटर दबाएं, जिससे workerman को पूर्ववत फ्रंटग्राउंड में चलने दिया जाएगा, फिर ctrl c दबाकर (SIGINT सिग्नल भेजकर) workerman को रोकें।

यदि इसे रोकने में असफल होते हैं, तो निम्नलिखित दो कमांड चलाने का प्रयास करें:

killall -9 php
ps aux|grep -i workerman|awk '{print $2}'|xargs kill -9

दूसरी संभावना

रोकने वाला उपयोगकर्ता और workerman शुरू करने वाला उपयोगकर्ता असंगत है, अर्थात् रोकने वाले उपयोगकर्ता के पास workerman को रोकने का अधिकार नहीं है।

समाधान:
workerman को जिस उपयोगकर्ता ने शुरू किया है, उसमें स्विच करें, या उच्च अनुमतियों वाले उपयोगकर्ता के साथ workerman को रोकें।

तीसरी संभावना

workerman मुख्य प्रक्रिया का pid फ़ाइल हटाई गई है, जिससे स्क्रिप्ट pid प्रक्रिया नहीं ढूंढ पाती है, जिससे रोकना विफल हो जाता है।

समाधान:
pid फ़ाइल को सुरक्षित स्थान पर सहेजें, दस्तावेज़ देखें Worker::$pidFile

चौथी संभावना

workerman मुख्य प्रक्रिया का pid फ़ाइल संबंधित प्रक्रिया workerman प्रक्रिया नहीं है।

समाधान:
workerman के मुख्य प्रक्रिया के pid फ़ाइल को खोलें और मुख्य प्रक्रिया का pid देखें, pid फ़ाइल सामान्यतः Workerman के समानांतर निर्देशिका में होती है। कमांड चलाएँ ps aux | grep मुख्य प्रक्रिया pid यह देखने के लिए कि संबंधित प्रक्रिया क्या workerman प्रक्रिया है, यदि नहीं है, तो संभवतः सर्वर फिर से शुरू हुआ है, जिससे workerman द्वारा सहेजा गया pid समाप्त हो गया है, और यह pid किसी अन्य प्रक्रिया द्वारा उपयोग किया जा रहा है, जिससे रोकना विफल हो जाता है। यदि ऐसा है, तो केवल pid फ़ाइल को हटाएँ।

पाँचवीं संभावना

grpc एक्सटेंशन स्थापित है, लेकिन grpc एक्सटेंशन के लिए संबंधित पर्यावरण चर सेट नहीं किए गए हैं, जिससे शुरू होने के बाद एक अतिरिक्त माउंट प्रक्रिया पैदा होती है, जिससे रोकने में विफलता होती है।