Dies Aliquanti

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

bash の()のPIDは?Bashではまるシリーズ (2)

 まえにbashスクリプトでそのスクリプト自体をバックグラウンドで実行するには、

#!/bin/bash
(
 やりたいこと
) &

でできるという話を書きましたが、()カッコのなかは、サブシェルで実行されるので、ことなるPID(プロセスID)を持つはずです。今日のお題はこれを取得するには?です。

普通にやってみる。

% cat ./test1.sh
#!/bin/bash
echo $$
(
    echo $$
    sleep 10
) &

% ./test1.sh
3650
3650

% ps
   PID TTY      TIME CMD
 12337 pts/5    0:00 csh
  3652 pts/5    0:00 sleep
  3653 pts/5    0:00 ps
  3651 pts/5    0:00 test1.sh
%

うまくいきませんね...親シェルのPIDと同じ...
要はシェルスクリプトを親用、子用でわけてしまえばいいわけだから、

% cat ./test2.sh
#!/bin/bash
echo $$
./test2_sub.sh &

% cat ./test2_sub.sh
#!/bin/bash
echo $$
sleep 10

% ./test2.sh
3712
3713

% ps
   PID TTY      TIME CMD
 12337 pts/5    0:00 csh
  3714 pts/5    0:00 sleep
  3713 pts/5    0:00 test2_su
  3715 pts/5    0:00 ps

うまく、いっているようです。ファイルが2つに別れているのはイマイチ・・・

evalを使ってみる、

 % cat ./test3.sh
#!/bin/bash
echo $$
(
    eval echo \$\$
    sleep 10
) &

% ./test3.sh
3805
3805

% ps
   PID TTY      TIME CMD
 12337 pts/5    0:00 csh
  3807 pts/5    0:00 sleep
  3808 pts/5    0:00 ps
  3806 pts/5    0:00 test3.sh

キーっ、うまくいかない。orz
こうなりゃ () なんか使わないで、 ヒアドキュメントで直にbashに喰わせてやるっ!&はどこに書けばいいんだっ?!

% cat ./test4.sh
#!/bin/bash
echo $$
/bin/bash << EoS &
    eval echo \$\$
    sleep 10
EoS

% ./test4.sh

5257
5258

% ps
   PID TTY      TIME CMD
  5260 pts/5    0:00 ps
 12337 pts/5    0:00 csh
  5259 pts/5    0:00 sleep
  5258 pts/5    0:00 bash

 

はぁ、はぁ・・・うまくいったみたい・・・

ほんとうはどうやるの?



コメント

Re:bash の()のPIDは?Bashではまるシリーズ(04/17)

こんにちは。

...
( #サブシェル起動
SELF_PID=$!
...
) &
...

とやるのが一番シンプルに出来るみたいです。
わたしは使ったことないですが、bash 4.0 以降だと、$BASHPID というのが使えるらしいです。

  • 2009/10/31(土) 20:31:30 |
  • URL |
  • 通りすがりのものです #79D/WHSg
  • [ 編集 ]

Re[1]:bash の()のPIDは?Bashではまるシリーズ(04/17)

通りすがりのものですさん、ごんばんわ
>...
>( #サブシェル起動
> SELF_PID=$!
> ...
>) &
>...

>とやるのが一番シンプルに出来るみたいです。
おお、なるほど…
最近はすっかり「Ruby猿」になってしまい、ちょっと複雑なことはすぐRubyを使ってしまってますが、bashを使いこなすと、ハッカーな感じがしますね。(結構ミーハーな私)

  • 2009/11/02(月) 20:55:25 |
  • URL |
  • B.O #79D/WHSg
  • [ 編集 ]

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://diesaliquanti.blog.fc2.com/tb.php/619-514676d2
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad

まとめ

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。