একক ব্যবহারকারীর পরিস্থিতিতে যদি আমরা উদাহরণটি নিই তবে আমরা xterm
কেবল পিডের সংখ্যা গণনা করতে পারি xterm
; xterm
প্রতিটি উইন্ডোর জন্য পৃথক পিড তৈরি করে।
gnome-terminal
তবে একটি একক পিড চালায় তবে সুসংবাদটি হ'ল এটি প্রতিটি উইন্ডো এবং / অথবা ট্যাবের জন্য শিশু প্রক্রিয়া তৈরি করে। কমান্ড দ্বারা আমরা এই শিশু প্রক্রিয়াগুলি পুনরুদ্ধার করতে পারি:
pgrep -P <pid_of_gnome-terminal>
এর সাথে মোকাবিলা করার জন্য কয়েকটি জটিলতা রয়েছে:
আপনার প্রশ্নটি পড়া, আমরা ধরে নিতে পারি, এই ক্ষেত্রে সেই ব্যবহারকারী প্রকৃতপক্ষে এক্স-সেশনের মালিক । সাধারণত আমরা কেবল-পরিবর্তনশীল ব্যবহার করতে $USER
পারি, তবে এটি বর্তমানে লগ ইন করা ব্যবহারকারীদের সাথে মেলে না $DISPLAY
।
একাধিক ব্যবহারকারীর পরিস্থিতিতে, (যেগুলির মধ্যে) টার্মিনাল অ্যাপ্লিকেশন সম্পর্কিত পিডগুলি বর্তমানের সাথে আবশ্যক নয় $DISPLAY
। আমাদের কেবল প্রাসঙ্গিক পিড এবং চাইল্ড-পিডগুলি বিভক্ত করতে হবে।
ইউনিটিতে (15.10 বা নিম্ন), যদি কোনও দ্বিতীয় ব্যবহারকারী লগ ইন করে, একটি অতিরিক্ত প্রক্রিয়া শুরু হয় ( gnome-pty-helper
), যা শিশু প্রক্রিয়া হিসাবে প্রদর্শিত হয় gnome-terminal
, তবে প্রক্রিয়াটির (স্পষ্টতই) কোনও উইন্ডো বা ট্যাব নেই। উপর মাতে , প্রক্রিয়া যাহাই হউক না কেন বিদ্যমান।
সংক্ষেপে
টার্মিনাল অ্যাপ্লিকেশনটির ট্যাব এবং / অথবা উইন্ডোগুলির সংখ্যা গণনা করার জন্য আমাদের এগুলি করতে হবে:
- দেখুন যে আমরা একটি টার্মিনাল অ্যাপ্লিকেশন চালাচ্ছি যার একাধিক পিড বা একক পিড রয়েছে
$DISPLAY
(এক্স-সেশন)
- চলমান প্রক্রিয়াগুলি থেকে, কেবল এটি সম্পর্কিত চলমান পিডগুলি বিভক্ত করুন
$DISPLAY
- যদি অ্যাপ্লিকেশনটি তার পিডের জন্য চাইল্ড-প্রক্রিয়াগুলি চালায় (উইন্ডোজ / ট্যাবগুলির জন্য),
gnome-pty-helper
সংখ্যাটি সংশোধন করতে রান চলছে কিনা তা দেখুন।
বর্তমানে খোলার উইন্ডো এবং / বা ট্যাবগুলির সংখ্যা নির্ভরযোগ্যতার সাথে খুঁজে পেতে এটি খুব ভালভাবে স্ক্রিপ্ট করা যায়।
এই পান্ডুলিপি
নীচের স্ক্রিপ্টে, লক্ষ্যযুক্ত টার্মিনাল অ্যাপ্লিকেশনটি আর্গুমেন্ট হিসাবে ব্যবহৃত হয় । স্ক্রিপ্টটি এটি ব্যবহার করে অনেক টার্মিনালগুলিতে কাজ করে tested Tilda
এই মুহূর্তে একটি ব্যতিক্রম ।
একটি উদাহরণ
- আমার দু'জন ব্যবহারকারী লগ ইন করেছেন, একটি (বর্তমান নয়) দুটি
gnome-terminal
উইন্ডোতে, একটি (ছবিতে একটি) তিনটি gnome-terminal
উইন্ডো এবং দুটি xterm
উইন্ডো রয়েছে।
আদেশ:
/path/to/get_terms.sh gnome-terminal
আউটপুট:
3
যখন
/path/to/get_terms.sh xterm
আউটপুট:
2
এই পান্ডুলিপি
#!/bin/bash
terminal=$1
# get the user running the current x-session
username=$(who | grep $DISPLAY | head -1 | awk '{print $1}')
# get the pid of the terminal for the current user
userpid=$(pgrep -u $username $terminal)
# check what type the terminal is (multi pid/single pid)
npids="$(echo "$userpid" | wc -w)"
# in case of a single pid, count the children
if [ "$npids" -eq 1 ]; then
# check if gnome-pty-helper runs (starts when multiple users are logged in)
ptpid=$(pgrep gnome-pty-helpe)
# get number of child- procs
let "orig = $( pgrep -P $(pgrep -u $username $terminal) | wc -w )"
# if pty-helper runs, correct the number of child procs
if [ -n "$ptpid" ] && [ -n "$userpid" ]; then
let "n_terms = $orig-1"; else let "n_terms = $orig"
fi
# if no child procs run, n-terminals = n-counted pids (difference Mate <> Unity)
if [ "$n_terms" -eq 0 ]; then echo $orig; else echo $n_terms; fi
# in case of multiple pids, count the pids
elif [ "$npids" -gt 1 ]; then echo $npids
fi
ব্যবহার করা
স্ক্রিপ্টটি একটি খালি ফাইলে অনুলিপি করুন, এটি সংরক্ষণ করুন, কার্যকর get_terms.sh
করে দিন এবং আদেশ দ্বারা এটি চালনা করুন:
/path/to/get_terms.sh <terminal_application>
tty
। আমি অনুমান করি যে আমরা / অন্যরা "প্রশ্ন "টিতে খুব বেশি মনোনিবেশ করেছি এবং ভুলে গিয়েছি যে পুরো" প্রয়োজন "এর জন্য অন্যান্য সমাধান থাকতে পারে :) আমি এমনকি এলোমেলো রঙ নির্বাচনকারীকে প্রয়োগ করে খেলব। যদি এটি 256 টির রঙ হয় তবে একই / অনুরূপ রঙগুলি নির্বাচন করা বেশি হওয়া উচিত নয়। তবে প্রদত্ত পিটিএস সংখ্যার জন্য ম্যানুয়ালি রঙ সেট করা আরও ভাল ব্যক্তিগতকরণ দেবে।