Linuxでは、各端末は1つのセッションにのみ関連付けられています(セッションには1つ以上のプロセスグループがあり、プロセスグループには1つ以上のプロセスがあります)。端末に関連付けられたセッションのセッションIDを取得する方法は?
ttyデバイスファイル(たとえば、/dev/tty1
または/dev/pts/0
)を受け取って、このtty /端末に関連付けられたセッションIDを返す関数やコマンドがありますか?
Linuxでは、各端末は1つのセッションにのみ関連付けられています(セッションには1つ以上のプロセスグループがあり、プロセスグループには1つ以上のプロセスがあります)。端末に関連付けられたセッションのセッションIDを取得する方法は?
ttyデバイスファイル(たとえば、/dev/tty1
または/dev/pts/0
)を受け取って、このtty /端末に関連付けられたセッションIDを返す関数やコマンドがありますか?
次の手順を実行します。あなたがチェックしたいTTY
stat
を。特に、使用しているメジャー/マイナーデバイスIDを調べます。式major*256+minor
を使用して、単一の番号にそれらを組み合わせる
オープン/proc/
を(あるいは単にstat
から生の数を取る)と名前が数字だけですべてのディレクトリをスキャンします。ディレクトリの名前は、システム内のプロセスのpid
です。
このようなディレクトリごとに、/proc/pid/stat
を開き、スペースで区切られたフィールドにファイルを解析します(2番目のフィールドの周囲にかっこが付いています)。第7フィールドはTTYデバイスのメジャー/マイナーです。探しているTTYに一致するものが見つかるまでスキャンしてください。
このファイルの第6フィールドは、プロセス番号(探している番号)のsid
です。第8フィールドは、TTYのpgrp
です。
ファイル構造の詳細here。
私は、ioctl TIOCGSIDが*現在の制御端末*でそれを見つけることができることを発見しました。他の端末では使用できません。検索が続行されます... –
/dev/tty1が開いているPIDを検索するには、 '/ proc'をスキャンして' getsid(pid) 'を呼び出してセッションを取得します。 – alk
スタックオーバーフローは、プログラミングおよび開発に関する質問のサイトです。この質問は、プログラミングや開発に関するものではないので、話題にはならないようです。ヘルプセンターの[ここではどのトピックを参照できますか](http://stackoverflow.com/help/on-topic)を参照してください。おそらく、[スーパーユーザ](http://superuser.com/)や[Unix&Linux Stack Exchange](http://unix.stackexchange.com/)の方が良いかもしれません。 – jww