1

Angstrom Linuxを実行している組み込みシステム(よく知られているBeagleBoardのクローンであるDevkit8000)用のプログラムをcでコーディングしました。

プログラムはいくつかのスレッドを作成し、そのうちの1つはボードに接続されたカメラで写真を撮る役割を果たし、現在2番目のスレッドはその画像を別のパスに移動するだけです。プログラムは一日中実行されている必要があり、それを停止する唯一の方法は信号を送信することです。

crontabを編集して、特定の時間にプログラムを起動し、停止する必要があるときにシグナルを送信しました。この方法でプログラムを起動すると、しばらく実行するとプロセスが強制終了されるという問題がありますが、起動すると手動で(コマンドラインを介して)プログラムすると、完全に機能し、停止することはありません。

crontabとコマンドラインの間でこの異なる動作が発生する理由についてはわかりません。システムログを確認しましたが、有用なものは見つかりませんでした。私も少し読んでいて、OSが非常に多くのリソースを使用している場合、プロセスを強制終了できることがわかりましたが、これが1つのシナリオ(crontabと手動)でのみ発生することは意味がありません...

何が起こっているのかについての手がかりはありますか?

前もって感謝します!

4

1 に答える 1

0

主な違いは、cronを介してジョブを実行すると、非対話型の非ログインシェルが呼び出されることです。その効果は、ユーザーのデフォルトのシェルによって異なります。たとえば、KornシェルまたはBashを使用している場合、インタラクティブログインシェルの場合のように、.profileは実行されません。Kornシェル88は.kshrc($ ENVファイル)を実行しますが、ksh93は実行しません。したがって、最初に.profileファイルを「ソーシング」した後、スクリプトからプログラムを呼び出すことから始めるのがよいでしょう。

. $HOME/.profile

それが失敗した...プロセスが「殺された」と言うとき、あなたはそのようなメッセージを受け取りますか?もしそうなら、それは誰かがSIGKILLを送信しているように聞こえkill -9ます。そうでない場合は、straceまたはltraceを実行して、どの時点で停止するかを確認できます。

于 2012-05-29T11:31:41.127 に答える