カスタム環境を使用してプロセスを「実行」するには?

カスタム環境を使用してプロセスを「実行」するには?

はいBashでプログラムでプロセスを作成する。任意の環境変数とコマンドを渡すことができる必要があります。これを達成するために実行してからを/usr/bin/env呼び出しますbash -c。時には、起動するプロセスが停止せずに終了したいが、コマンドから返されたPIDを終了すると、次に実行されるサブプロセスの代わりにbashコマンドのみが終了します。強く叩く。

私は見たBashのサブプロセスにSIGTERMを渡すそれで、この問題はbashで解決できると思いましたが、exec正確な命令を呼び出すことはできません。

たとえば、以下は絶対に終了しないRubyスクリプトです。

STDOUT.sync = true

puts "booted"

while true
  puts "running"
  sleep 1
end

で実行すると、$ exec ruby spec/fixtures/never_exits.rbプログラムは期待どおりに動作します。 bash セッションを終了すると、プログラムは終了します。

envただし、 like を使用してこのコマンドを実行しようとすると、$ /usr/bin/env bash -c exec ruby spec/fixtures/never_exits.rbコマンドは出力なしですぐに終了します。スクリプトが呼び出されないようです。

exec環境変数の指定と組み合わせることができますか?

1行で呼び出すことができるサブプロセスにTERMを伝播する別の方法はありますか?

答え1

タイプ構造を使用するときは、bash -cコマンド全体を文字に入れる必要があります"。例えば

$ bash -c echo hello

$ bash -c "echo hello"
hello

だからあなたの場合

env bash -c "exec ruby script.rb"

しかし、その例は実際に多くのことを行いません。初期環境を作るenvという意味ですか?env -iまた、bash起動スクリプトで魔法のようなことが起こらない限り、bashはまったく必要ないかもしれません。

 env -i RUBYPATH=/some/dir RUBYLIB=/other/dir /path/to/ruby script.rb

関連情報