重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

 Linux上で動作するようにプログラミングしたプロセスを、telnetで起動したのですが、telnetを閉じてしまうと起動したプロセスが終了してしまいます。
 telnetを抜けてもプロセスが動作し続けるためにはどうしたら良いでしょうか。
 なお、プロセスの起動方法は、メインが一つあって、メインから複数のプロセスを起動しています。

 また、最終的には、PCのautoexeみたいに自動起動にしたいのですが、やりかたがわかりません。
 御存知の方、いましたら宜しく御教示願います。

A 回答 (5件)

こんにちわ。


#3 のmuyoshid です。

>> 起動したプログラムの先頭で、「setpgrp();」として下さい。
>> → プログラムが端末から切り離されます。
> 試して見たのですが、telnetを終了すると、起動したプロセスも
> 終了してしまいました。
あれま。
Unix 環境で daemon プログラムを作る時、いつもこれでやってた
んですが・・・。
ちょっと古い書き方だったかも知れません。

> これを、ユーザ権限内で動作させるには、/.bash_profile に
> コマンドを記述すれば良いのでしょうか。
思いつく方法として、2つ程
1) su - ユーザ名 -c "実行コマンド"
  として、目的のユーザ権限で実行する。
2) 実行するコマンドを
  chmod 04755 コマンド
  chown ユーザ名 コマンド
  としておけば、上記コマンドはコマンドのオーナー権限で
  実行されます。
    • good
    • 0

起動コマンドの最後にスペースと&を入れるとバックグランドプロセスとして起動されます。



telnet> aaa.sh &
    • good
    • 0
この回答へのお礼

こんにちは

御回答、ありがとうございます。

“&”を付ける件ですが、バックグラウンドで動作できると思って、質問を出す前に試しました。
 これも、telnetを抜けると、起動したプロセスがいなくなってしまいます。
 別の方法で対応します。

お礼日時:2003/01/25 14:16

こんにちわ。



> telnetを抜けてもプロセスが動作し続けるためには
> どうしたら良いでしょうか。
起動したプログラムの先頭で、「setpgrp();」として下さい。
→ プログラムが端末から切り離されます。

> また、最終的には、PCのautoexeみたいに自動起動にしたいのですが、
> やりかたがわかりません。
#2 の方もおっしゃっていますが、/etc/rc.d になると思います。
    • good
    • 0
この回答へのお礼

こんにちは

御回答、ありがとうございます。

> > telnetを抜けてもプロセスが動作し続けるためには
> > どうしたら良いでしょうか。
> 起動したプログラムの先頭で、「setpgrp();」として下さい。
> → プログラムが端末から切り離されます。
 試して見たのですが、telnetを終了すると、起動したプロセスも
終了してしまいました。
 結局のところ、起動したプロセス自身が、daemonに変わることで、
端末からの制御をはなれ、telnetを抜けても、プロセスが残る様に
しました。

> > また、最終的には、PCのautoexeみたいに自動起動にしたいのですが、
> > やりかたがわかりません。
> #2 の方もおっしゃっていますが、/etc/rc.d になると思います。
 こちらも試したのでが、うまくいきません。
 状況は、#2の方のところに書きますので、もし、何かわかりましたら、
御回答をお願いします。

お礼日時:2003/01/25 14:31

自動起動のほう



・システム起動時に動かしたいなら、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 ); で起動したい子プロセスに変更
 で、子プロセスを生成しています。

   以上、宜しくお願いします。

補足日時:2003/01/25 15:04
    • good
    • 0

$ man nohup



とか
    • good
    • 0
この回答へのお礼

こんにちは

nohupを試して見たのですが、root権限が必要なので、
今回は、別の方法で対応します。

 御回答、ありがとうございました。

お礼日時:2003/01/25 14:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!