2017-11-10 3 views
1

Linuxでは、各端末は1つのセッションにのみ関連付けられています(セッションには1つ以上のプロセスグループがあり、プロセスグループには1つ以上のプロセスがあります)。端末に関連付けられたセッションのセッションIDを取得する方法は?

ttyデバイスファイル(たとえば、/dev/tty1または/dev/pts/0)を受け取って、このtty /端末に関連付けられたセッションIDを返す関数やコマンドがありますか?

+0

私は、ioctl TIOCGSIDが*現在の制御端末*でそれを見つけることができることを発見しました。他の端末では使用できません。検索が続行されます... –

+0

/dev/tty1が開いているPIDを検索するには、 '/ proc'をスキャンして' getsid(pid) 'を呼び出してセッションを取得します。 – alk

+0

スタックオーバーフローは、プログラミングおよび開発に関する質問のサイトです。この質問は、プログラミングや開発に関するものではないので、話題にはならないようです。ヘルプセンターの[ここではどのトピックを参照できますか](http://stackoverflow.com/help/on-topic)を参照してください。おそらく、[スーパーユーザ](http://superuser.com/)や[Unix&Linux Stack Exchange](http://unix.stackexchange.com/)の方が良いかもしれません。 – jww

答えて

0

次の手順を実行します。あなたがチェックしたいTTY

  1. statを。特に、使用しているメジャー/マイナーデバイスIDを調べます。式major*256+minorを使用して、単一の番号にそれらを組み合わせる

  2. オープン/proc/を(あるいは単にstatから生の数を取る)と名前が数字だけですべてのディレクトリをスキャンします。ディレクトリの名前は、システム内のプロセスのpidです。

  3. このようなディレクトリごとに、/proc/pid/statを開き、スペースで区切られたフィールドにファイルを解析します(2番目のフィールドの周囲にかっこが付いています)。第7フィールドはTTYデバイスのメジャー/マイナーです。探しているTTYに一致するものが見つかるまでスキャンしてください。

  4. このファイルの第6フィールドは、プロセス番号(探している番号)のsidです。第8フィールドは、TTYのpgrpです。

ファイル構造の詳細here

関連する問題