私はCプログラムをプログラミングし、それを自分のlinuxコンピュータでテストしました。サーバでCプログラムをバックグラウンドで実行するには
私は今すぐ自分のサーバーにアップロードして、そこにバックグラウンドの進捗状況として実行したいと考えています。
私はパテを閉じた後も実行を続けるプログラムをどのように起動できますか?
ありがとうございました!
私はCプログラムをプログラミングし、それを自分のlinuxコンピュータでテストしました。サーバでCプログラムをバックグラウンドで実行するには
私は今すぐ自分のサーバーにアップロードして、そこにバックグラウンドの進捗状況として実行したいと考えています。
私はパテを閉じた後も実行を続けるプログラムをどのように起動できますか?
ありがとうございました!
あなたがSSHでこのようにする前に、あなたのコードを実行しているときにコールので
に&を追加することにより、実行中のプログラムを残すことができます:
./mycode
は、あなたはそれが好きになります
./mycode &
プログラムをバックグラウンドで実行する場合は、コマンドに '&'文字を追加する必要があります。
./program &
しかし、プロセスは現在のttyに関連付けられます。現在のtty(あなたの場合はSSHセッション)を閉じると、SIGHUPシグナルがttyに関連するすべてのプロセスに送られ、終了します。 psコマンドを使用すると、関連するttyが1つのプロセスに表示されます。
disownコマンドを使用すると、親シェルがSIGHUPシグナルを受け取った場合にSIGHUPシグナルが送信されないようにジョブをマークできます。現在のttyを閉じる前に、あなたは書くことができます。
disown %jobID
はあなたがバックグラウンドでプログラムを実行するときに括弧で囲まれたジョブIDを見ることができます。また、ジョブコマンドでjobIDを確認することもできます。
コマンドを直接実行して、SIGHUP信号が送信されないようにすることができます。このためにはnohupコマンドを使用できます。
nohup ./program &
SIGHUP信号を使用してプログラムを終了しないようにするもう一つの方法は、プログラムでこの信号をキャッチすることです。 Cプログラムではシグナル signal.hにある関数
ただし、プログラムをデーモンまたはサーバーとして実行する場合は、SystemdサービスまたはSystem V initスクリプトをよく書きます。