LoginSignup
16
14

More than 5 years have passed since last update.

プロセスに紐付いたttyを取得する

Last updated at Posted at 2014-02-07

現在の端末デバイス名(/dev/pts/1とか)を取得するには通常はttyというコマンドで探せるが、これはあくまで現在入力中プロセスの端末名しか取得できない。つまりスクリプト内などで起動元プロセスの端末名を取得するのには使えない。

なので自分で親プロセスを辿ってttyを探すスクリプトを作ってみた。

search_tty.sh
#!/bin/bash

# プロセスに紐付いたttyを取得する http://bit.ly/1eDpRpu
function search_tty() {
  local pid=${1:-$$} tty=""
  while [[ 1 -lt $pid ]]; do
    [[ -d /proc/$pid/fd ]] || break
    tty=$(readlink /proc/$pid/fd/1 2>/dev/null | awk '{print $1}')
    [[ -c $tty ]] && { echo "$tty"; return 0; }
    pid=$(perl -pe 's/\(.*\)/()/' /proc/$pid/stat | awk '{print $4}')
  done
  return 1
}

search_tty $1

これは第1引数に指定されたプロセスIDに紐付いたttyを探すスクリプトです。
PIDが渡されなかった場合は現在のプロセスIDを元にttyを探します。
他でコピペ利用しやすいようBash関数にしてからに実行してます。

利用例

16
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
14