आप किस वातावरण से प्रक्रिया बना रहे हैं?
यदि आप इसे C कोड जैसे वातावरण से कर रहे हैं, तो आप कांटा () और फिर बच्चे में, निष्पादन से पहले खुद को एक SIGSTOP भेज सकते हैं (), और निष्पादन को रोक सकते हैं।
एक अधिक सामान्य समाधान (शायद सबसे अच्छा) एक स्टब बनाने के लिए होगा जो ऐसा करता है। तो ठूंठ कार्यक्रम होगा:
- वास्तविक कार्यक्रम के नाम और तर्कों से युक्त तर्क लें
- खुद को एक हस्ताक्षर भेजें
- निष्पादन () उचित तर्कों के साथ वास्तविक कार्यक्रम
यह सुनिश्चित करेगा कि आप किसी भी प्रकार की दौड़ की स्थिति से बचने के लिए नए प्रसंस्करण के साथ बहुत दूर हो रहे हैं इससे पहले कि आप इसे एक संकेत भेज सकें।
शेल के लिए एक उदाहरण:
#!/bin/bash
kill -STOP $$
exec "$@"
और ऊपर दिए गए कोडज़ का उपयोग करना:
michael@challenger:~$ ./stopcall.sh ls -al stopcall.sh
[1]+ Stopped ./stopcall.sh ls -al stopcall.sh
michael@challenger:~$ jobs -l
[1]+ 23143 Stopped (signal) ./stopcall.sh ls -al stopcall.sh
michael@challenger:~$ kill -CONT 23143; sleep 1
-rwxr-xr-x 1 michael users 36 2011-07-24 22:48 stopcall.sh
[1]+ Done ./stopcall.sh ls -al stopcall.sh
michael@challenger:~$
jobs -l
पीआईडी को दर्शाता है। लेकिन अगर आप इसे एक शेल से कर रहे हैं तो आपको सीधे पीआईडी की आवश्यकता नहीं है। आप बस कर सकते हैं: kill -CONT %1
(यह मानते हुए कि आपके पास केवल एक ही काम है)।
यह एक से अधिक काम के साथ कर? पाठक के लिए एक अभ्यास के रूप में छोड़ दिया :)
#!/bin/bash
[दर्ज करें]$@ &
[दर्ज करें]PID=$!
[दर्ज करें]kill -STOP $PID
[दर्ज करें]echo "Suspended: $PID, press ENTER to continue it"
[दर्ज करें]read
[दर्ज करें]kill -CONT $PID
[दर्ज करें]wait $PID
[दर्ज करें]echo