Bash
Linux

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

More than 3 years have passed since last update.

現在の端末デバイス名(/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関数にしてからに実行してます。

利用例