2

Linuxを実行する組み込みシステムを使用しています。コンパイル済みの C プログラムをフォアグラウンドで実行すると、正しく動作します。ただし、プログラム呼び出しの後に「&」を追加して、バックグラウンドでジョブとして実行すると、特定の機能が正しく動作しません。動作を停止する主な機能は、ソケットからの読み取りに使用される「読み取り」関数 (unistd.h) の使用です。

バックラウンドでプロセスを実行すると、そのアクセス許可が減少しますか? 他に何がこの動作を引き起こす可能性がありますか?

編集: この関数は、'select' および 'read' 関数を使用して、CANbus メッセージ フレームの受信に使用されるソケットから読み取ります。データが受信されると、それを分析し、文字列を .txt ファイルに「エコー」して、データロガーとして機能させます。フォアグラウンドで実行すると、ファイルが作成されて正常に追加されますが、バックグラウンドで実行すると、ファイルは作成/追加されません。

4

3 に答える 3

5

プロセスをフォアグラウンドで実行するかバックグラウンドで実行するかの唯一の違いは、端末との対話です。

通常、プロセスをバックグラウンドにすると、プロセスstdinは切断され (キーボードからの入力を読み取らなくなります)、プロセスに Ctrl-C/Ctrl-D などのキーボード ショートカット シグナルを送信できなくなります。

それ以外は何も変更されず、権限や優先度も変更されません。

于 2013-09-16T14:51:39.537 に答える
1

いいえ、バックグラウンドに入るときにプロセスのパーミッションが変更されることはありません。

于 2013-09-16T14:50:49.033 に答える
0

内部的に何が起こっているかは、プロセスのコードが実行される前に行われ、ファイル記述子 0,1,2 (stdin,out,err) は通常のファイルではなく /dev/null を指します。

>/file/path同様に、記述子を使用する場合、stdoutその特定のファイルを指します

これを確認するには

ls -l /proc/process_number/fd
于 2014-02-27T14:57:13.183 に答える