এআরজি_এমএক্স অনুসরণ করে, একটি নতুন প্রক্রিয়াটির জন্য সর্বাধিক আর্গুমেন্টগুলি মনে হচ্ছে ARG_MAX
আমার ম্যাক মিনি 3,1 চলমান উবুন্টু 12.04 এ ভুলভাবে (বা কমপক্ষে অস্পষ্টভাবে) সংজ্ঞায়িত হয়েছে:
$ getconf ARG_MAX # arguments
2097152
$ locate limits.h | xargs grep -ho 'ARG_MAX[ \t]\+[0-9]\+' | uniq | cut -d ' ' -f 8
131072
প্রকৃত সীমা এইগুলির মধ্যে কোথাও রয়েছে বলে মনে হচ্ছে:
$ cd "$(mktemp -d)"
$ touch $(seq 1 131072) && find . -mindepth 1 -printf x | wc -c && rm *
131072
$ touch $(seq 1 131073) && find . -mindepth 1 -printf x | wc -c && rm *
131073
$ touch $(seq 1 $(getconf ARG_MAX)) && find . -mindepth 1 -printf x | wc -c && rm *
bash: /usr/bin/touch: Argument list too long
আমি একটি ছোট অনুসন্ধান করেছি:
cd "$(mktemp -d)"
min=131072
max=2097152
while true
do
search=$((min + (max - min) / 2))
if touch $(seq 1 $search) 2>/dev/null
then
min=$search
else
max=$search
fi
[[ $((max - min)) -le 1 ]] && echo "ARG_MAX = $min" && break
done
অবশেষে এর ফলস্বরূপ ARG_MAX = 314290
, এর ARG_MAX
আগে পাওয়া মানের কোনওটির সাথে কোনও সম্পর্ক নেই বলে মনে হয় । এটা কি স্বাভাবিক? আসলটি খুঁজে পাওয়ার সহজ উপায় কি আছে ARG_MAX
?
আমি কি ARG_MAX এর সংজ্ঞাটি ভুল বুঝেছি? দেখে মনে হচ্ছে এটি পৃথক স্পেসগুলি (বা) ছাড়াই আর্গুমেন্টগুলির বাইট (বা সম্ভবত চরিত্রের) দৈর্ঘ্য length যদি এটি সত্যিই বাইট দৈর্ঘ্য হয়, অন্য নিষেধাজ্ঞাগুলিও কি আছে ?