• ベストアンサー

シェルスクリプトの中であるプログラムにシグナルを送りたいとき

こんにちわ, 今シェルスクリプトの学習をしています。 シェルスクリプトのなかであるプログラムにSIGINTを送るシェルスクリプトを作るにはどうすればいいでしょうか。 たとえば, ./hogeというCプログラムがあり,その中でsignal関数を用いてSIGINTを捕らえるようなプログラムがなされているとき, シェルスクリプトで #!/bin/sh ./hoge & PID=$$ sleep 2 kill SIGINT $PID だと,$$にはこのシェル自体のPIDが返ってきているので,うまくいきません。 なんとか,./hogeをうごかし,その後何秒かあとにSIGNALを送るようなシェルスクリプトを作りたいのですが,どうすればいいでしょうか。 Cでforkさせて外部呼出しによって送るしかないのでしょうか。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • you-m
  • ベストアンサー率58% (190/327)
回答No.4

No2のtatsu99さんが書かれている通り、「$!」でバックグラウンド実行したプロセスのプロセスIDが取得できます。 ただし、これはBシェル(/bin/sh)の標準的な仕様であり、Linuxに限らずBシェルの動く環境であれば、ほぼ例外なく使える機能です。 もちろん、bashのようなBシェルの上位互換シェルでもつかえます。 ちなみに、このような特殊変数には他に、 $? 直前のコマンドの終了ステータス $$ 実行中のシェルスクリプトのPID $- Bシェルを制御するフラグの状態 などがあり、シェルスクリプトを使う際には非常に役に立ちます。

その他の回答 (3)

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.3

No2です。 Linuxの場合は、$!が直前にバックグラウンドで実行したプロセスIDになります。 PID=$! として確認してみてください。

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.2

基本的には以下の方法をとります。 1.PSコマンドを実行する。 2.その結果からhogeのプログラムの行をピックアップする。 3.その行のプロセスIDを取得する。 PSによって表示される内容がOSによって若干異なりますので、どのOSで動作させるのかも提示されると、さらによい回答が得られると思います。

回答No.1

私はシェルスクリプトに関してはよく知らないので、 参考になりそうなURLだけ紹介しておきます。 # 「じゃあ、コメントするな」というご指摘、覚悟してます ぱっとみたかんじだと、yu393939さんが望んでいる処理をできそうな感じがします。 お目汚し、失礼。

参考URL:
http://www.nishimoto-site.net/archiver/fj/unix/200101/msg00018.html

関連するQ&A