लिनक्स में एक रुकी हुई प्रक्रिया क्या है?


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

मैंने देखा कि टी का मतलब राज्य कॉलम में क्या है और यह पता चला कि इसका मतलब स्टॉप्ड है, लेकिन मुझे समझ नहीं आता कि इसका मतलब यह है कि प्रक्रिया क्या कर रही है।

मुझे पता है कि आप PHP में अपना सिग्नल हैंडल बना सकते हैं , लेकिन मैंने ऐसा नहीं किया है, इसलिए जब PHP को SIGTERM सिग्नल मिलता है तो वह क्या करता है?

एक रुकी हुई प्रक्रिया (यदि कुछ भी हो) क्या कर रही है?

जवाबों:


15

इसका मतलब है कि प्रक्रिया को एक STOPसंकेत मिला है , और जब तक यह एक CONTसंकेत प्राप्त नहीं करता है तब तक कुछ भी नहीं करेगा , यहां तक ​​कि समाप्ति भी नहीं।

STOPसंकेतों का सबसे आम स्रोत उपयोगकर्ता हिटिंग है ^zजबकि प्रक्रिया अग्रभूमि में है, और CONTबाद में भेजने का सामान्य तरीका टाइपिंग है fgया bgजो क्रमशः अग्रभूमि और पृष्ठभूमि में प्रक्रिया जारी रखते हैं।

STOPप्रक्रिया भेजने का एक और तरीका है kill -STOP $pid। इसी तरह, CONTएक प्रक्रिया के साथ भेजा जा सकता है kill -CONT $pid

चूंकि आपने TERMप्रक्रियाओं को संकेत भेजे थे , इसलिए मैं मानता हूं कि आप उन्हें समाप्त करना चाहते हैं। ऐसा होने के लिए, प्रक्रियाओं को CONTसंकेत प्राप्त करने होंगे। आप kill -CONT 8754 8767एक टर्मिनल विंडो में टाइप करके भेज सकते हैं।


क्या कोई CONT सिग्नल भेजने से स्क्रिप्ट तब तक चल सकेगी, जब तक वह पूरी नहीं हो जाती? या यह स्क्रिप्ट को तुरंत समाप्त करने का कारण होगा?
जॉन

एक कॉन्टेक्ट प्राप्त करने पर यह प्रक्रिया जारी रहती है कि यह (STOP से पहले) क्या कर रहा था। यदि आपने एक TERM ( kill $pidउदाहरण के लिए) भेजा था जबकि इसे रोक दिया गया था, हालाँकि, यह तब (belatedly) उस TERM का जवाब देगा और समाप्त कर देगा।
एरोन

हम्म, इसलिए मैंने एक TERM को भेजा जिसे चलाने के kill 8754लिए प्रक्रिया को अंततः समाप्त करने का कारण होना चाहिए? क्या आप जानते हैं कि एक प्रक्रिया किस राज्य में होगी, जबकि यह समाप्त होने के दौर में है? यह देखते हुए कि यह प्रक्रिया STOP अवस्था में प्रवेश कर गई है, जैसे कि इसे STOP सिग्नल प्राप्त kill -STOP 8754हो गया है, क्या यह भी हो सकता है यदि इसे TERM सिग्नल भेजा गया हो?
जॉन

एक रुकी हुई प्रक्रिया TERMतब तक सिग्नल के कारण समाप्त नहीं होगी जब तक इसे जारी नहीं रखा जाता है। यदि यह एक KILLसंकेत प्राप्त करता है , तो भी तुरंत समाप्त हो जाएगा , जबकि रोक दिया गया है। मुझे लगता है कि यह समाप्त होने पर एक प्रक्रिया रन अवस्था में होगी। मैं PHP से बहुत परिचित नहीं हूँ, और यह नहीं जानता कि कैसे बताऊँ कि एक प्रक्रिया क्यों रुकी, क्षमा करें। आम तौर पर, हालांकि, प्रक्रिया बंद नहीं होती है, लेकिन जब वे प्राप्त करते हैं तो समाप्त हो जाते हैं TERM
एरोन

4

लिनक्स / यूनिक्स में रोक दी गई प्रक्रिया एक प्रक्रिया / कार्य है जिसे सस्पेंड सिग्नल ( SIGSTOP/ SIGTSTP) प्राप्त हुआ है जो कर्नेल को उस पर कोई भी प्रसंस्करण नहीं करने के लिए कहता है क्योंकि इसे रोक दिया गया है, और यह केवल इसका निष्पादन फिर से शुरू कर सकता है यदि इसे SIGCONTसंकेत भेजा जाता है।

मूल रूप से रुकी हुई प्रक्रिया कर्नेल से निरंतर संकेत का इंतजार करती है, ठीक उसी तरह जैसे कि निलंबित प्रक्रिया कर्नेल से जागने की स्थिति की प्रतीक्षा करती है।

लिनक्स कर्नेल प्रक्रिया बताती है: रेडी, रनिंग, स्टॉप्ड, सस्पेंडेड, ट्रेस, ज़ोंबी

छवि क्रेडिट: पॉलीटेक्निक.फिर


लिनक्स कर्नेल में प्रत्येक प्रक्रिया को एक task_structडेटा संरचना द्वारा दर्शाया जाता है और प्रत्येक taskवेक्टर में हर तरफ पॉइंटर्स की सरणी होती है task_struct। जो सिस्टम में एक प्रक्रिया या कार्य का वर्णन करता है (या तो यह है unrunnable, runnableया stopped)। अधिक विवरण के लिए देखें: प्रक्रियाएं और लिनक्स डेटा संरचनाएं )।

यह भी देखें: लिनक्स कर्नेल: प्रक्रिया प्रबंधन


@Jus रिपोर्ट के लिए धन्यवाद, मैंने इसे ठीक कर दिया है।
केनोरब
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.