আপনি কোন পরিবেশ থেকে প্রক্রিয়া তৈরি করছেন?
আপনি যদি এটি কোনও সি সি কোডের মতো পরিবেশ থেকে করছেন, তবে আপনি ()) কাঁটাচামচ করতে পারেন এবং তারপরে সন্তানের মধ্যে, এক্সিকিউটিভ ()) এর আগে নিজের কাছে একটি সাইনস্টপ প্রেরণ করুন, আরও কার্যকর হওয়া আটকাতে পারেন।
আরও জেনেরিক সমাধান (সম্ভবত সেরা) হ'ল এটির মতো স্টাব তৈরি করা। সুতরাং স্টাব প্রোগ্রাম হবে:
- আসল প্রোগ্রামের নাম এবং যুক্তি সমন্বিত যুক্তিগুলি গ্রহণ করুন
- নিজেই একটি সাইনস্টপ প্রেরণ করুন
- exec () যথাযথ যুক্তি সহ বাস্তব প্রোগ্রাম
এটি নিশ্চিত করবে যে নতুন প্রসেসিংয়ের সাথে সংকেত পাঠানোর আগে আপনি কোনও প্রকারের রেস শর্তকে এড়িয়ে যাচ্ছেন।
শেলের জন্য একটি উদাহরণ:
#!/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
PID, দেখায়। তবে আপনি যদি এটি শেল থেকে করছেন তবে আপনার সরাসরি পিআইডি লাগবে না। আপনি কেবল এটি করতে পারেন: kill -CONT %1
(ধরে নিচ্ছেন আপনার কেবল একটি কাজ আছে)
একাধিক কাজ করে তা করছেন? পাঠকের জন্য অনুশীলন হিসাবে রেখে গেছে :)
#!/bin/bash
[প্রবেশ]$@ &
[প্রবেশ]PID=$!
[প্রবেশ]kill -STOP $PID
[প্রবেশ]echo "Suspended: $PID, press ENTER to continue it"
[প্রবেশ]read
[প্রবেশ]kill -CONT $PID
[প্রবেশ]wait $PID
[প্রবেশ]echo