- 締切済み
telnetを抜けても、プログラムを実行するには?
Linux上で動作するようにプログラミングしたプロセスを、telnetで起動したのですが、telnetを閉じてしまうと起動したプロセスが終了してしまいます。 telnetを抜けてもプロセスが動作し続けるためにはどうしたら良いでしょうか。 なお、プロセスの起動方法は、メインが一つあって、メインから複数のプロセスを起動しています。 また、最終的には、PCのautoexeみたいに自動起動にしたいのですが、やりかたがわかりません。 御存知の方、いましたら宜しく御教示願います。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- muyoshid
- ベストアンサー率72% (230/318)
こんにちわ。 #3 のmuyoshid です。 >> 起動したプログラムの先頭で、「setpgrp();」として下さい。 >> → プログラムが端末から切り離されます。 > 試して見たのですが、telnetを終了すると、起動したプロセスも > 終了してしまいました。 あれま。 Unix 環境で daemon プログラムを作る時、いつもこれでやってた んですが・・・。 ちょっと古い書き方だったかも知れません。 > これを、ユーザ権限内で動作させるには、/.bash_profile に > コマンドを記述すれば良いのでしょうか。 思いつく方法として、2つ程 1) su - ユーザ名 -c "実行コマンド" として、目的のユーザ権限で実行する。 2) 実行するコマンドを chmod 04755 コマンド chown ユーザ名 コマンド としておけば、上記コマンドはコマンドのオーナー権限で 実行されます。
- yakumon
- ベストアンサー率35% (22/62)
起動コマンドの最後にスペースと&を入れるとバックグランドプロセスとして起動されます。 telnet> aaa.sh &
- muyoshid
- ベストアンサー率72% (230/318)
こんにちわ。 > telnetを抜けてもプロセスが動作し続けるためには > どうしたら良いでしょうか。 起動したプログラムの先頭で、「setpgrp();」として下さい。 → プログラムが端末から切り離されます。 > また、最終的には、PCのautoexeみたいに自動起動にしたいのですが、 > やりかたがわかりません。 #2 の方もおっしゃっていますが、/etc/rc.d になると思います。
お礼
こんにちは 御回答、ありがとうございます。 > > telnetを抜けてもプロセスが動作し続けるためには > > どうしたら良いでしょうか。 > 起動したプログラムの先頭で、「setpgrp();」として下さい。 > → プログラムが端末から切り離されます。 試して見たのですが、telnetを終了すると、起動したプロセスも 終了してしまいました。 結局のところ、起動したプロセス自身が、daemonに変わることで、 端末からの制御をはなれ、telnetを抜けても、プロセスが残る様に しました。 > > また、最終的には、PCのautoexeみたいに自動起動にしたいのですが、 > > やりかたがわかりません。 > #2 の方もおっしゃっていますが、/etc/rc.d になると思います。 こちらも試したのでが、うまくいきません。 状況は、#2の方のところに書きますので、もし、何かわかりましたら、 御回答をお願いします。
- astronaut
- ベストアンサー率58% (303/516)
自動起動のほう ・システム起動時に動かしたいなら、RedHat系の場合 /etc/rc.d/rc.local にコマンドを記述 ・ユーザーがログインしたときに動かしたいなら ~/.bash_profile に記述 ・全てのユーザーに適用したいなら、 /etc/profile に記述 などというのが、安直でよろしいかと。 Debian系などの場合は、他の方のフォローを待ちます。
補足
こんにちは 御回答、ありがとうございます。 自動起動は、システム起動時に行いたいので、/etc/rc.d/rc.local に実行したいコマンド(プロセス)をフルパスで記述したのですが、 うまく動作しません。 コマンドの記述方法等で、注意事項等ありましたら教えてください。 実施後の状況を下記に示します。 また、メッセージキューを見ると、rc.localに追記したプロセス、 及び、それによって起動されたプロセスは、root権限で動作している様に みえます。 これを、ユーザ権限内で動作させるには、/.bash_profile にコマンド を記述すれば良いのでしょうか。 この方法だと、システム起動時に起動出来ないので、起動条件を満たさ なくなりますか??? 【実施後の状況】 ps -Aでプロセスの動作状態を見ると、rc.localに追記したコマンドの プロセス名があり起動はされている。 rc.localに記述したプロセスは、他のプロセスを起動して、メッセージ 通信を行っているが、追加起動されるプロセス数はあっているが、名称が 親のままになっている。 ipcsでメッセージキューを見ると、追加起動されたプロセスのところで 溜まったまま処理されないで残っている。 【子プロセスの起動方法】 rc.localに追記したコマンドにて、 fork(); で、子プロセスを作成 execl( 子プロセス,"",NUL ); で起動したい子プロセスに変更 で、子プロセスを生成しています。 以上、宜しくお願いします。
- astronaut
- ベストアンサー率58% (303/516)
$ man nohup とか
お礼
こんにちは nohupを試して見たのですが、root権限が必要なので、 今回は、別の方法で対応します。 御回答、ありがとうございました。
お礼
こんにちは 御回答、ありがとうございます。 “&”を付ける件ですが、バックグラウンドで動作できると思って、質問を出す前に試しました。 これも、telnetを抜けると、起動したプロセスがいなくなってしまいます。 別の方法で対応します。