ফোরকড প্রক্রিয়া এবং ভাগ করা ভেরিয়েবল


1

আমার লগতে সমস্ত লেখার জন্য দুটি কাঁটাযুক্ত ফাংশন সহ একটি বাশ স্ক্রিপ্ট রয়েছে। উভয় শেষ হয়ে গেলে, আমি এই লগটি মুছতে চাই।

আমি যদিও সমস্যাটি করছি তা হ'ল এটি processFinishCountকখনই একের বেশি নয়। প্রতিটি forked প্রক্রিয়া একটি দখল করে কপি ভাগ পরিবর্তনশীল এবং বৃদ্ধি কপি যখন এটি কল যে delete_log?

ভেরিয়েবলটি সঠিকভাবে বর্ধিত হয় তা আমি কীভাবে নিশ্চিত করতে পারি?

processFinishCount=0

delete_log()
{
    let processFinishCount++
    if ["$processFinishCount" == 2]; then
        rm log.txt

    else
        echo `$processFinishCount task(s) finished" >> log.txt
    fi
}

function_one()
{
    ...
    delete_log
}
function_two()
{
    ...
    delete_log
}

function_one &
function_two &

ভেরিয়েবলটি প্রক্রিয়াফিনিশকাউন্ট হয় তবে যদি বিবৃতিতে প্রসেসকাউন্ট থাকে।
জয়ছ্রিস

এছাড়াও কাঁটাচামচ ঘটে যখন বৈশ্বিক চলক 0 হয়। সুতরাং উভয় কাঁটাচামচ প্রক্রিয়া 0 দিয়ে শুরু হবে এবং 1 তে বৃদ্ধি পাবে One
জয়ছ্রিস

@ জাইক্রিস, ভেরিয়েবলের পার্থক্যটি কেবল একটি টাইপোর ছিল <br বাহ্যিক ফাইলটি একটি বৈধ সমাধান। আমি চেষ্টা করব যখন আমি সোমবার কাজে ফিরব
জেমস ওয়েবস্টার

উত্তর:


0

এক প্রক্রিয়াতে বৈশ্বিক পরিবর্তনশীল অন্যটিতে আপডেট হবে না। সুতরাং একটি বাহ্যিক ফাইল ব্যবহার করা যেতে পারে। আমার এ জাতীয় কিছু থাকবে (নির্ভুলতার জন্য পরীক্ষা করা হয়নি)।

delete_log()
{
    touch /tmp/$1
    if [ -e $status_file1 -a -e $status_file2 ]
    then 
        rm log.txt
    else
        echo log >> log.txt
    fi
}

f1()
{
    ...
    delete_log $1
}

f2()
{
    ...
    delete_log $1
}

f1 fork1.done &
f2 fork2.done &

-1

waitসমস্ত শিশু প্রক্রিয়া শেষ হওয়ার জন্য আপনি অপেক্ষা করতে ব্যবহার করতে পারেন । a3 সেকেন্ড পরে এই মুদ্রণ :

sleep 3 &
sleep 1 &
wait
echo a

help wait:

wait: wait [id]
    Wait for job completion and return exit status.

    Waits for the process identified by ID, which may be a process ID or a
    job specification, and reports its termination status.  If ID is not
    given, waits for all currently active child processes, and the return
    status is zero.  If ID is a a job specification, waits for all processes
    in the job's pipeline.

    Exit Status:
    Returns the status of ID; fails if ID is invalid or an invalid option is
    given.

আমি অপেক্ষা করতে পারি না, প্রথম স্থানটিতে কাঁটাচামচ করার উদ্দেশ্যটি হ'ল মূল স্ক্রিপ্টটি যত তাড়াতাড়ি সম্ভব শেষ করতে কার্যকর করা execution
জেমস ওয়েবস্টার

হ্যা, তুমি পারো. ব্যাকগ্রাউন্ডযুক্ত শেল ফাংশনে অপেক্ষা করুন, তারপরে দুটি কাজের কল করুন। তারপরে আপনি মূল স্ক্রিপ্ট থেকে ফিরে আসতে পারেন, এবং সাবশেল অপেক্ষা করছে।
অ্যালান শুটকো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.