2012年2月14日火曜日

HP-UXのシェルスクリプトで親プロセスのIDを取得する


GNUコマンドがふんだんに使えるLinuxが好きだけど、職務上HP-UXも使ったりする。
シェルスクリプトで親プロセスを取得したくて、いろいろ調べた時に分かったのでちょっと書いておきます。


#!/bin/sh
PID=$$
PPID=$( UNIX95="" ps -o ppid -p $PID | tail -1 )
PCOMM=$( UNIX95="" ps -o comm -p $PPID | tail -1 )
echo PID: $PID
echo PPID: $PPID
echo PPCOM: $PCOMM


実行結果
% sh ./test.sh
PID: 27324
PPID: 25107
PPCOM: -zsh

と一致しているので大丈夫でしょう。

分かりにくいのはここ。
PPID=$( UNIX95="" ps -o ppid -p $PID | tail -1 )

というのもpsもmanを見てみると、-o format とあるものの「UNIX標準の構文」の部分。
英語だとXPG4の部分。
普通に
ps -o pid
としても
ps: オプションが正しくありません。-- o
とか出てくる。

なにこれ、どうすんの?と思ったら、ここを見つけた。
http://d.hatena.ne.jp/cartooh/20050611

要は環境変数UNIX95がセットしてあればいいらしい。値はダミーでもいいみたい。
% UNIX95="dummy" ps -o pid
  PID
26857
25107

…やっぱりLinuxが好きだなぁ~。

0 件のコメント: