• 締切済み

telnetを抜けても、プログラムを実行するには?

 Linux上で動作するようにプログラミングしたプロセスを、telnetで起動したのですが、telnetを閉じてしまうと起動したプロセスが終了してしまいます。  telnetを抜けてもプロセスが動作し続けるためにはどうしたら良いでしょうか。  なお、プロセスの起動方法は、メインが一つあって、メインから複数のプロセスを起動しています。  また、最終的には、PCのautoexeみたいに自動起動にしたいのですが、やりかたがわかりません。  御存知の方、いましたら宜しく御教示願います。

みんなの回答

  • muyoshid
  • ベストアンサー率72% (230/318)
回答No.5

こんにちわ。 #3 のmuyoshid です。 >> 起動したプログラムの先頭で、「setpgrp();」として下さい。 >> → プログラムが端末から切り離されます。 > 試して見たのですが、telnetを終了すると、起動したプロセスも > 終了してしまいました。 あれま。 Unix 環境で daemon プログラムを作る時、いつもこれでやってた んですが・・・。 ちょっと古い書き方だったかも知れません。 > これを、ユーザ権限内で動作させるには、/.bash_profile に > コマンドを記述すれば良いのでしょうか。 思いつく方法として、2つ程 1) su - ユーザ名 -c "実行コマンド"   として、目的のユーザ権限で実行する。 2) 実行するコマンドを   chmod 04755 コマンド   chown ユーザ名 コマンド   としておけば、上記コマンドはコマンドのオーナー権限で   実行されます。

  • yakumon
  • ベストアンサー率35% (22/62)
回答No.4

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

kei_moon
質問者

お礼

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

  • muyoshid
  • ベストアンサー率72% (230/318)
回答No.3

こんにちわ。 > telnetを抜けてもプロセスが動作し続けるためには > どうしたら良いでしょうか。 起動したプログラムの先頭で、「setpgrp();」として下さい。 → プログラムが端末から切り離されます。 > また、最終的には、PCのautoexeみたいに自動起動にしたいのですが、 > やりかたがわかりません。 #2 の方もおっしゃっていますが、/etc/rc.d になると思います。

kei_moon
質問者

お礼

こんにちは 御回答、ありがとうございます。 > > telnetを抜けてもプロセスが動作し続けるためには > > どうしたら良いでしょうか。 > 起動したプログラムの先頭で、「setpgrp();」として下さい。 > → プログラムが端末から切り離されます。  試して見たのですが、telnetを終了すると、起動したプロセスも 終了してしまいました。  結局のところ、起動したプロセス自身が、daemonに変わることで、 端末からの制御をはなれ、telnetを抜けても、プロセスが残る様に しました。 > > また、最終的には、PCのautoexeみたいに自動起動にしたいのですが、 > > やりかたがわかりません。 > #2 の方もおっしゃっていますが、/etc/rc.d になると思います。  こちらも試したのでが、うまくいきません。  状況は、#2の方のところに書きますので、もし、何かわかりましたら、 御回答をお願いします。

  • astronaut
  • ベストアンサー率58% (303/516)
回答No.2

自動起動のほう ・システム起動時に動かしたいなら、RedHat系の場合 /etc/rc.d/rc.local にコマンドを記述 ・ユーザーがログインしたときに動かしたいなら ~/.bash_profile に記述 ・全てのユーザーに適用したいなら、 /etc/profile に記述 などというのが、安直でよろしいかと。 Debian系などの場合は、他の方のフォローを待ちます。

kei_moon
質問者

補足

こんにちは 御回答、ありがとうございます。  自動起動は、システム起動時に行いたいので、/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)
回答No.1

$ man nohup とか

kei_moon
質問者

お礼

こんにちは nohupを試して見たのですが、root権限が必要なので、 今回は、別の方法で対応します。  御回答、ありがとうございました。

関連するQ&A

  • タスクスケジューラでのtelnet実行について

    よろしくお願いいたします。 ネットワーク機器に定期的にログインチェックを行う必要が生じたため、 バッチファイルとVBSを作成し、手動で実行すると問題なく動作しました。 ところがWindowsタスクスケジューラでユーザーがログオフした状態で実行すると 異常終了してしまいました。 処理の流れは以下になります。 (1)バッチファイル起動 (2)バッチファイルが適当な名前を付けたコマンドプロンプトを起動。 (3)バッチファイルがVBSを起動 (4)VBSが(2)で起動したコマンドプロンプトをアクティブにする。 (5)VBSがSendKeysメソッドでコマンドプロンプト上でtelnetを実行 原因が分からず困っています。 ユーザーがログオフしている環境ではtelnetは実行できないものなのでしょうか。 どうぞご教授下さい。

  • Telnetをログアウトしても処理を続けたい

    PC1(AIX UNIX)からPC2(Win2000 sp2)へtelnetでログインし、PC2上のバッチファイルを実行させようとしています。 一連の作業を自動化させたいため、PC1上のシェルスクリプトでバッチファイルを起動させているのですが、ログアウトするとバッチファイルのプロセスも切れてしまいます。 シェルスクリプトはsleepコマンドのため、自動的にexitがかかってしまい、長い処理や処理時間の読めないプログラムを走らせることができません。UNIX系のnohupのようなことをWindows上で行うことはできないのでしょうか? 色々と調べても情報がなかったので、あきらめかけてます。ご存じの方、またご経験のある方がいましたら教えて下さい。

  • telnetってどうやって起動させるんですか?

    この4月から初めてLinuxというものを触っております。 RedHat8を使用しています。 telnetを起動しようとしているのですが、 どうしたら、起動できるのか、皆目分かりません。 ターミナルでtelnet+Enterで、 telnet> は表示されるんですが、その後がどうも 巧くいきません。 取りあえず、起動だけさせておきたいんですが・・・ ローカルエリアの他のWin2000PCから コマンドプロンプトでtelnetを立ち上げて open *********とやると 接続に失敗しました・・・と表示されてしまいます。 ntsysvにもtelnetは表記されてませんでした。 ps -ax で調べても、telnetは作動していない 模様です。 GUIのXウィンドウでサービス設定の項目も 調べましたが、telnetは載ってません。 telnetって一体どうなっているのでしょうか?? chkconfig --level 345 /usr/bin/telnet on とやっても、そのようなディレクトリやファイルは ありませんと表示されてしまいます。 是非、起動の仕方教えて下さいませ。 よろしくお願いします。 因みに、検査の結果は以下の通りでした。 [*****@**** bin]$ rpm -q telnet telnet-0.17-23 [*****@**** bin]$ rpm -qs telnet-0.17-23 通常/usr/bin/telnet 通常/usr/share/man/man1/telnet.1.gz 何卒、アドバイスのほどお願いします。

  • telnet へのパイプができないです

    telnet を使用して、たとえば web のデータを自動的に取得しようとしています。 80 番ポートに接続して 接続完了を待った後 http リクエストを出力する ということを意図していますが、下記環境では動作しません。 なぜでしょうか? $ uname -a Linux srv4 2.6.32-36-generic #79-Ubuntu SMP Tue Nov 8 22:29:26 UTC 2011 i686 GNU/Linux $ (sleep 3; echo "GET / HTTP/1.0"; echo;) | telnet www.google.co.jp 80 Trying 173.194.38.84... Connected to www.l.google.com. Escape character is '^]'. Connection closed by foreign host. よろしくおねがいします。

  • 自動でtelnet

    お世話になります。 ボタンクリックすると自動でTelnetを起動しコマンドを投げてtelnetを終了する...処理を作っています。 telnet接続からの操作はvbsで作成、 そのvbsをbatfileで起動するようにしました。 古いパソコン環境で動かす(32bit)というので、あえてvc++6.0で作成し正常に、動きました。 それを64bitのWindows2012で動かしたら、vbsの中のtelnetの接続のところでエラーになります。  'telnet'は、内部コマンドまたは外部コマンド、  操作可能なプログラムまたはバッチファイルとして認識されていません と、なります。 telnet clientはinstallしてあり、 コマンドプロンプトでbatファイルをたたくとちゃんと正常に動きます。 batファイルをダブルクリックでも動きます。 コマンドプロンプトでcscript xxx.vbs  としても正しく動きます。 プログラムから CreateProcessで、「cmd xxx.bat」としているのですが。。。 どこが間違ってるのか、何がダメなのか判断が付かないのです。 至急アドバイスをいただけないでしょうか。 よろしくお願いいたします。

  • VineLinux3.1のサーバにtelnetアクセスできない。

    VineLinux3.1をインストールいたしました。 telnetでアクセスしようとしてもできません。 google等いろいろ調べたのですが、分かりませんでした。 なぜでしょうか? よろしくお願いします。 【状況】 ・他のPCからtelnetしようとしても、  Connection closed by foreign host ・Vineのコンソールから  telnet 127.0.0.1  としても同様。 ・コンソールからの ping 127.0.0.1  他のPCからの  ping *.*.*.* は問題ないです。 ・ps -ef でみると inetdのプロセスは起動してます。 ・他のコンソールからtelnetでアクセスし用としているときに、  ps -ef を見ると、telnetのサービスは起動してます。 【インストール後に設定したこと】 ・/etc/inetd.conf のtelnet部分についてコメントを外しました。 ・/etc/hosts.allow  には、  ALL : 127.0.0.1  ALL : *.*.*.*  を設定しました。 ・/etc/hosts.deny には何も設定してません。 ・apt-get update/upgradeを行ってます。

  • telnetでloginできません@コンソール(RetHat)

    こんにちは、Linuxの初心者です。 telnetでのログインができずに困っています。 設定方法などについて教えていただければ幸いです。 --------------------------- 現在は、PCの電源を入れると自動的に表示されるGUIのログイン画面からrootとしてログインするようになっています。 ログインすると自動的にGUI画面が開きます。 左下のメニューからterminalウィンドウを開いて、 「telnet localhost」と入力すると「Login」と表示されます。 そして、「root」としてログインを試みるのですが、うまくゆきません。 ※表題の内容とは若干それますが・・・ 過去に登録したユーザーのパスワードを忘れてしまいました。 このユーザーのアカウントを削除し、新たに同じユーザー名で アカウントをつくりたいのですが、可能でしょうか? どのような手順でやればよいでしょうか? 使用しているのはRedHat Linuxです。 設定上の注意点などにつきまして、キーワードだけでも結構です。 よろしくお願いいたします。

  • /etc/init.d/rcSにプログラムを登録し、なにもできなくなりました

    Linuxでなにもできなくなりました。回避方法を教えてください。 下記のような場合、なにか回避策はないでしょうか。 アドバイスでも結構ですので、助言を頂きたいです。 足りない情報があれば回答いたします。 環境: Fedora Core 6 いきさつ: /etc/init.d/rcSにサンプルプログラムを登録し、 Linuxブート時に起動するようにした。 このサンプルプログラム起動はフォアグランドで実行するように指定した。 サンプルプログラムはコンソール上で動作するが、[Ctrl+c]で終了できず、 killコマンドで終了するしかない。 現象: コンソール上にサンプルプログラムが起動しているが、終了できずなにもできない。 telnetやftpデーモンを起動するようにしていたが、おそらくデーモン 起動前にサンプルプログラムを起動しているため、プロセスが起動しない。 (pingは通る) [Alt+ファンクションキー]で仮想コンソールの切り替えを行なっても、カーソルしか 存在しない。(ためしにユーザ/パスワードを入力してみましたが返答がありませんでした) その他: ハードウェアは組み込み系で、通常のFedora Coreとは異なるかもしれません。

  • Linux Fedora Core 2のVNCが自動実行しない

    自宅サーバーはLinuxのFC2を使って、VNCサーバーを構築しましたが、自動起動しません。 サービスのところTELNETとVNCSERVERとも起動中となっていますが、WINDOWSから接続できません。 一旦Linuxで#VNCSERVERと実行するとWINDOWSから接続できるようになります。なぜでしょうか? rc.dにVNCSERVERを実行するように追加しましたが、やはりだめです。 どうすれば起動時自動実行するでしょうか? よろしくお願いします。

  • 自動実行について

    こんばんは。 大変お世話になっております。 Visual C++.NETを用いてコンソール上でwinsockでソケットプログラミングを行っています。言語はC言語とWIN32APIを用いています。以下に示す動作を複数回、自動実行?というのでしょうか・・・は可能でしょうか? 1.ファイルオープンとメイン内でスレッドAとスレッドBを生成(マルチスレッド)です。この際、スレッドAでソケット1オープンし、スレッドBでソケット2をオープンしています 2.ファイルに取得値を書き込み 3.スレッドAとB内でソケットクローズ 4.メイン内でファイルクローズとCloseHandle関数にてスレッドA・B終了 1~4の内容を自動実行させたいのですが、なにか方法はあるのでしょうか?バッチファイルをあてると聞いたことがあるのですが、作り方が分からないのでお聞きしたしだいです。 よろしくお願い致します。