Dalam situasi pengguna tunggal, jika kita mengambil contoh xterm
, kita bisa menghitung jumlah pids xterm
; xterm
membuat pid terpisah untuk setiap jendela.
gnome-terminal
Namun menjalankan satu pid, tetapi kabar baiknya adalah ia menciptakan proses anak untuk setiap jendela dan / atau tab. kita dapat mengambil proses anak ini dengan perintah:
pgrep -P <pid_of_gnome-terminal>
Namun ada beberapa komplikasi yang harus dihadapi:
Membaca pertanyaan Anda, kami dapat berasumsi, bahwa pengguna dalam hal ini sebenarnya adalah pemilik sesi-x . Biasanya kita cukup menggunakan $USER
-variable, tetapi ini mungkin tidak cocok dengan pengguna yang saat ini masuk $DISPLAY
.
Dalam situasi multi-pengguna, pid milik aplikasi terminal (baik yang), tidak harus milik arus $DISPLAY
. Kita perlu memisahkan hanya pids yang relevan dan pids anak.
Pada Unity (15.10 atau lebih rendah), jika pengguna kedua masuk, proses tambahan dimulai ( gnome-pty-helper
), yang muncul sebagai proses anak dalam gnome-terminal
, tetapi proses (jelas) tidak memiliki jendela atau tab. Pada Mate , prosesnya tetap ada.
Pendeknya
Untuk menghitung jumlah tab dan / atau jendela aplikasi terminal, kita perlu:
- Lihat apakah kami menjalankan aplikasi terminal yang memiliki beberapa pids atau satu pid pada satu
$DISPLAY
(x-sesi)
- Dari proses yang berjalan, pisahkan hanya pids yang relevan, jalankan ini
$DISPLAY
- Jika aplikasi menjalankan proses-anak untuk pidnya (untuk windows / tab), lihat apakah
gnome-pty-helper
berjalan, untuk memperbaiki nomor.
Namun ini dapat ditulis dengan sangat baik, untuk menemukan jumlah jendela dan / atau tab yang saat ini terbuka.
Naskah
Dalam skrip di bawah ini, aplikasi terminal yang ditargetkan digunakan sebagai argumen . Script berfungsi pada banyak terminal yang saya uji. Pengecualian ada Tilda
pada saat ini.
Sebuah contoh
- Saya memiliki dua pengguna yang masuk, satu (bukan yang sekarang) dengan dua
gnome-terminal
jendela, satu (satu di gambar) dengan tiga gnome-terminal
jendela, dan dua xterm
jendela.
Perintah:
/path/to/get_terms.sh gnome-terminal
output:
3
sementara
/path/to/get_terms.sh xterm
output:
2
Naskah
#!/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
Menggunakan
Salin skrip ke file kosong, simpan sebagai get_terms.sh
, buat dan jalankan dengan perintah:
/path/to/get_terms.sh <terminal_application>
tty
. Saya kira kita / orang lain terlalu berkonsentrasi pada "pertanyaan" itu dan lupa bahwa mungkin ada solusi lain untuk seluruh "kebutuhan" :) Saya bahkan akan bermain dengan menerapkan pemilih warna acak. Jika 256 warna, memilih warna yang sama / mirip tidak akan banyak terjadi. Namun pengaturan warna secara manual untuk nomor poin yang diberikan akan memberikan personalisasi yang lebih baik.