web-dev-qa-db-ja.com

実行中のシェル/ターミナルの数を数える方法は?

現在実行中のシェルまたはターミナルウィンドウの数を数えようとしています。

私は試した ps a|grep bash;ps a|grep tty;

しかし、それは不正確な場合があります。

10
Martincho
ls /dev/pts/  | wc -l

上記のコマンドを使用して、開いているターミナルウィンドウをカウントします。

6
Ramesh

それらをリストするには:

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
2
Jeight

Macosでは次を使用できます:

cnt=$(w -h | grep "^$(whoami) *s[^ ]* *-"|wc -l)
echo "Your current terminal sessions: $cnt"

ここにあります: https://stackoverflow.com/a/6180547/6320039

0
Ulysse BN