2011-08-25 5 views
1

私はビジーボックスで実行するためにいくつかのbashスクリプトを移植しています。それらは、灰でサポートされていないdisownを使用して、プロセスからのメッセージがstdout/stderrに現れるのを防ぐためにいくつかのプロセスを強制終了します。私はこの機能を維持したいと思います。それは、stdout/sterrを閉じるか、実行後に/dev/nullにリダイレクトするかどうかを示します。プロセスのstdoutとstderrを `disown`やgdbなしで閉じるには?

どうやってですか?

+0

'nohup cmd&'について知っていますか、それは役に立ちますか?がんばろう。 – shellter

+0

コメントありがとうございます。うーん、それは役に立たなかった。 – Derrick

+0

申し訳ありませんが、あなたの投稿を読んで、私はあなたが達成しようとしていることはまだ明確ではありません。 psuedocode、予想される入力(該当する場合)、期待される出力を順番に含めるように投稿を編集できますか?このスクリプトのセットは、デーモンとして、またはcrontabから実行できますか?がんばろう。 – shellter

答えて

0

プロセスがそのプロセス外から実行されると、ファイル記述子のリダイレクトを変更することはできません。これは、プロセスがシェルによって作成された時点でリダイレクトを行う必要があることを意味します。それがIgnacioのようにファイルにリダイレクトするかfdsを閉じるかはあなた次第です。

なぜ、bashの無効化組み込み機能がファイル記述子に何らかの影響を及ぼしているとは思えません。 bashマニュアルには次のように書かれています:

 
    disown [-ar] [-h] [jobspec ...] 
     Without options, each jobspec is removed from the table of 
     active jobs. If jobspec is not present, and neither -a nor -r 
     is supplied, the shell's notion of the current job is used. If 
     the -h option is given, each jobspec is not removed from the ta- 
     ble, but is marked so that SIGHUP is not sent to the job if the 
     shell receives a SIGHUP. If no jobspec is present, and neither 
     the -a nor the -r option is supplied, the current job is used. 
     If no jobspec is supplied, the -a option means to remove or mark 
     all jobs; the -r option without a jobspec argument restricts 
     operation to running jobs. The return value is 0 unless a job- 
     spec does not specify a valid job. 

しかし、多分あなたが達成しようとしていることについての私の理解は不完全です。

+0

この誤解は、私が移植しているスクリプトに由来しています。 http://devresources.linuxfoundation.org/dev/hotplug/ 彼らはpidを殺す機能を持っていますが、そうする前にdisownを呼び出します。ターミナルに「プロセス:殺されました」と表示されないという副作用があります。 Busyboxの灰は断言されていないので、私は似たようなものを探していました。 killの出力をリダイレクトすると、ジョブが実行されます。 – Derrick

1

exec [n]>&-は、FD [n]になります。

関連する問題