現在実行中のシェルまたはターミナルウィンドウの数を数えようとしています。
私は試した ps a|grep bash;
ps a|grep tty;
しかし、それは不正確な場合があります。
ls /dev/pts/ | wc -l
上記のコマンドを使用して、開いているターミナルウィンドウをカウントします。
それらをリストするには:
ps aux | awk '{print $7}' | grep -v "?"
それらを数えるには:
ps aux | awk '{print $7}' | grep -v "?" | wc -l
上部のTTYヘッダーが含まれているため、その番号から1を引く必要があります。
これは、実行中のサブシェルの数を数えたいか、開いているターミナルウィンドウの数を数えたいかによって異なります。
ターミナルウィンドウだけを数えるには、次のようにする必要があります。
ls /dev/pts/ | wc -l (stated in a previous answer)
例えば:
私のシステムでは、現在6つのttyが利用可能です。また、fgまたはbgで4つのプロセスが実行されている1つのターミナルオープンpts/0があります。
root 4565 0.0 0.0 4060 576 tty1 Ss+ May01 0:00 /sbin/mingetty /dev/tty1
root 4567 0.0 0.0 4060 572 tty2 Ss+ May01 0:00 /sbin/mingetty /dev/tty2
root 4569 0.0 0.0 4060 568 tty3 Ss+ May01 0:00 /sbin/mingetty /dev/tty3
root 4571 0.0 0.0 4060 576 tty4 Ss+ May01 0:00 /sbin/mingetty /dev/tty4
root 4573 0.0 0.0 4060 576 tty5 Ss+ May01 0:00 /sbin/mingetty /dev/tty5
root 4575 0.0 0.0 4060 572 tty6 Ss+ May01 0:00 /sbin/mingetty /dev/tty6
me 17482 0.0 0.0 110236 1136 pts/0 R+ 11:36 0:00 ps aux
root 20374 0.0 0.0 108336 1816 pts/0 Ss May23 0:00 -bash
root 20953 0.0 0.1 161436 1960 pts/0 S May23 0:00 su - me
me 20954 0.0 0.1 108524 1984 pts/0 S May23 0:00 -bash
バックグラウンドの子プロセスを取り除きたい場合は、uniqにパイプします。
ps aux | awk '{print $7}' | grep -v "?" | uniq | wc -l
TTYのヘッダータイトルには1を引く必要がありますが、それでも気にしないようにttyを完全に削除することで、これをさらに改善できます。
ps aux | awk '{print $7}' | grep -v "?" | grep -vi "tty*" | uniq
これにより、正確なカウントが得られます。
[〜#〜]編集[〜#〜]
それについてもっと 'ps -a'を考えるとうまくいき、最初のgrepを省くことができます。
ps a | awk '{print $2}' | grep -vi "tty*" | uniq | wc -l
Macosでは次を使用できます:
cnt=$(w -h | grep "^$(whoami) *s[^ ]* *-"|wc -l)
echo "Your current terminal sessions: $cnt"