UNIXのKtermを開いて、あるシェルを実行したのですが、
実行後、プロンプトが返って来ません。
KtermにてCNTL+D、CNTL+C、Delete等を押しても
効きません。

プロンプトが返ってくるのと返らないのでは、システム的にどのような違いがあるのでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (2件)

> プロンプトが返ってくるのと返らないのでは、


> システム的にどのような違いがあるのでしょうか?

何通りか考えられると思います。

1つは、実行したプログラム内でCtrl-Cを無視するように
してある場合です。ディストリビューションにくっついてくる
一般的なコマンドでは余りそういうことは無いように思いますが、
Ctrl-Cを無視するようにプログラム内で設定することは可能です。

もう一つは、プログラムがOSから強制的にスリープさせられて
いる場合です。ディスクなどのデバイスの読み込み・書き込みの
順番待ち、メモリ領域確保(に異常があってメモリが確保できない)、
ネットワーク接続要求に対する応答待ちなどの理由で、
これらの要求をOSに出したプログラムがOSから「ちょっと待て」
と言ってスリープさせられることがあります。

通常の状態では起こりませんが、ディスクなどデバイスの異常、
AGPなど特殊なメモリドライバの異常、ネットワーク接続先ホストが停止、
ネットワーク障害、などでこのような状態になることがあります。
psコマンドでプロセスの状態を見たときに、状態が"D"になっていると
OSからの強制スリープ状態です。

Ctrl-Cで止まらないプロセスに対しては、

kill -9 xxxx
(xxxxはpsコマンドで調べたプロセスのプロセスID)

killall -9 process_name
(process_nameはプロセスの名前)

で止められることが多いです。(ただ、後者の場合、同じ名前の
プロセスが全部止まります。)

他にもいくつか理由はあると思われます。
    • good
    • 0

シェルスクリプトの実行がきちんと終了していないのではないでしょうか。


ためしにもう一つKtermを起動してpsコマンドを実行してください。
プロセスが残っているようでしたらスクリプトの再確認をしましょう。

ちなみにプロンプトが返ってこない状態というのはフォアグラウンドのプロセスが終了していない状態で、次のコマンドが入力できないという弊害がありますね。

#Ctrl+Cが効かないとなると永久ループにはまっているのかもしれません。
    • good
    • 0
この回答へのお礼

ありがとうございます。助かります。

お礼日時:2001/11/18 13:23

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qdfコマンドが返ってこない

nfsを使って別サーバーの領域をマウントしています。
この場合、nfsのネットワークマウントが上手く行かなくなった場合などに、マウントが切れてしまう場合があります。
この状態の時に、dfコマンドで各領域の空き容量を確認しようとしたら、コマンドが返ってきません。

もちろん、nfsのマウント状態が正常であれば、すぐに結果が返ってきます。コマンドが返ってこない場合にはCtrl+cで抜けて、強制的にアンマウントしてやれば、dfは返ってくるようになります。

このdfコマンドでマウントが正常にできているかを、定期的にプログラムで確認しようとしているのですが、この問題があり上手くできません。

dfコマンドが一定時間返ってこなければ強制的に抜けるとか、タイムアウト時間を指定できるなどの方法はあるのでしょうか?

また、他にnfsのマウントが正常に行われているかプログラムから確認するのにいい方法がありますでしょうか?
例えば、マウント先にあるファイルを開けるかどうかで判断するとか・・・

現状、同じ状態を作り出すことができないので、マウント先のファイルが開けるかで判断するというのが適切かはわかりません。

なお、プログラムはC言語で製作しております。

よろしくお願いします。

nfsを使って別サーバーの領域をマウントしています。
この場合、nfsのネットワークマウントが上手く行かなくなった場合などに、マウントが切れてしまう場合があります。
この状態の時に、dfコマンドで各領域の空き容量を確認しようとしたら、コマンドが返ってきません。

もちろん、nfsのマウント状態が正常であれば、すぐに結果が返ってきます。コマンドが返ってこない場合にはCtrl+cで抜けて、強制的にアンマウントしてやれば、dfは返ってくるようになります。

このdfコマンドでマウントが正常にできてい...続きを読む

Aベストアンサー

nfsマウントが途絶している時にエラーを返すのでしたら、
nfsファイルシステムマウント時のオプションに"soft"を
指定してみてはどうでしょうか。

Q起動しているサービスを確認するコマンド

初歩的な質問で恐縮ですが、ご教示いただけますと幸いです。

起動しているサービスを確認するために以下の2つのコマンドを打ってみるのですが、結果(出て来るサービス名)が違います。
このコマンドの違いについてご教示いただけますでしょうか。

(1)service --status-all
(2)chkconfig --list

Aベストアンサー

(1)service --status-all

サービスの現在のステータスを調べるコマンド

(2)chkconfig --list

OSのブート時に自動起動するサービスを調べるコマンド

違いが出るのは、
・ブート後に手動あるいは他のコマンドから起動したサービス
・ブート後に手動あるいは他のコマンドから、あるいはエラーで停止したサービス
・ブート後に実行はされるがすぐに停止して常駐しないサービス (ntpdate とか)

あるいは、(1)ではサービス名が表示されない物もあるので、どのサービスがどんなステータス出力をするのか知っておく必要もありますね。(service network statusとか)

Qシェルスクリプトでファイル内の数値文字列を数値として扱うには

失礼します。
シェルスクリプトでファイル内のテキスト(数値文字列)を取得して、それを使って計算するにはどうすれば良いでしょうか?

str:ファイル内のテキスト(数値文字列)

res=$(( $str + 1 ))

・エラー
")syntax error: invalid arithmetic operator (error token is "


よろしくお願いします。

Aベストアンサー

bashをご使用と判断して

res=$(( $str + 1 ))
ではなく、
res=$(( str + 1 ))
だと思います。

> exprもやってみたのですが、処理が遅くなるので使いません。
興味があって以下のシェルで検証してみました。

#!/bin/bash

str=1
i=0

echo 'Using $((str + 1))'
date '+%H:%M:%S.%N'

while [ $i -lt 10000 ]
do
str=$(( str + 1))
i=`expr $i + 1`
done

date '+%H:%M:%S.%N'

exit

$ ./test.sh
Using $((str + 1))
09:18:46.290418000
09:18:56.929345000
これをexprに書き換えたところ
$ ./test2.sh
Using expr
09:19:00.302748000
09:19:19.259990000

exprだと19秒ですが、$(( 演算 )) だと10秒程度なので、演算が多くなれば確かにexprは不利ですね。

bashをご使用と判断して

res=$(( $str + 1 ))
ではなく、
res=$(( str + 1 ))
だと思います。

> exprもやってみたのですが、処理が遅くなるので使いません。
興味があって以下のシェルで検証してみました。

#!/bin/bash

str=1
i=0

echo 'Using $((str + 1))'
date '+%H:%M:%S.%N'

while [ $i -lt 10000 ]
do
str=$(( str + 1))
i=`expr $i + 1`
done

date '+%H:%M:%S.%N'

exit

$ ./test.sh
Using $((str + 1))
09:18:46.290418000
09:18:56.929345000
これをe...続きを読む

Qtop などのプロンプトに戻らないコマンドの終了

例えば、top コマンドは画面上に内容を表示し続けます。
ユーザが Ctrl-C をキータイプしない限り、プロンプトには戻りません(他のコマンドをタイプしたりはできません)。

そのようなコマンドを使った、次のようなシェルスクリプトの作成を考えています:
(1) top コマンドの結果をファイル等にリダイレクトやパイプで渡す
(2) (1) のコマンドは終了させ、
(3) 次の処理へ続く...

[Q1] もちろん、top & とやればプロンプトにはすぐ戻りますが、別途 kill してやる必要があります。
   面倒な気がするので、他に方法があればご教示ください。
[Q2] 面倒でない方法があればお教えください(もしくはこれを調べろ/参照しろ、などでも助かります)。
[Q3] また、このようなタイプのコマンドに呼び方があればお教えください。

※ とくに top コマンドを使う必要があるのではなく、
  他の同様のプロンプトに戻らないコマンドでも通用することを知りたいと思っています
※ 可能であればシェルに依存しないものが望ましいと考えています。
  現在は ksh を使用していますが、bash/tcsh でも解決方法があればお教えください。

説明が下手くそで恐縮ですが、よろしくお願いします。

例えば、top コマンドは画面上に内容を表示し続けます。
ユーザが Ctrl-C をキータイプしない限り、プロンプトには戻りません(他のコマンドをタイプしたりはできません)。

そのようなコマンドを使った、次のようなシェルスクリプトの作成を考えています:
(1) top コマンドの結果をファイル等にリダイレクトやパイプで渡す
(2) (1) のコマンドは終了させ、
(3) 次の処理へ続く...

[Q1] もちろん、top & とやればプロンプトにはすぐ戻りますが、別途 kill してやる必要があります。
   面倒な気がす...続きを読む

Aベストアンサー

top に限らず、シェルスクリプトから起動した外部コマンドは、
シェル変数 $! で直前に起動したプロセスIDを取得できるので、
適当な処理の後、kill することも出来ますね。
タイミングが難しいけど。

Qsedの置換文字に変数を使用したいのですが・・・

あるファイルの特定の文字を変換し、上書きをする処理を行いたいのですが、sedの置換文字に変数が渡せなくて困っています。

例:
X="a"
Y="b"
echo test.txt | sed 's/${X}/${Y/g}' >test.txt

sedでは置換文字に${X}といった変数を使用することはできないのでしょうか?

Aベストアンサー

' ・・・' で囲まれた中の$はそのままドルマークです。変数展開をするなら、'・・・'で囲んではいけません。

何も囲まないか、"・・・"で囲むかです。

Qsqlplusで表示が変なので、出力を整形したい。

いつもお世話になっています。

サーバにアクセスしてsqlplusで、
データを調べたいのですが、
出力形式が見づらくて困っています。

よくわからいのですが、
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------
1の値 2の値
3の値
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------

上記のように意味不明な形式で出てきます。

例えばこんな風に

select カラム1,カラム2,カラム3 from hoge;

カラム1 1の値
---------------------------
カラム2 2の値
---------------------------
カラム3 3の値

等のように分かりやすく表示できないでしょうか?

ちなみにOracle9iR2を使用しています。
sqlに関するツールは使用できないルールでして、あくまでsqlplusのコマンド上でみやすくしなければなりません。

分かりづらくですいませんが、皆さま、ご教授お願いします。

いつもお世話になっています。

サーバにアクセスしてsqlplusで、
データを調べたいのですが、
出力形式が見づらくて困っています。

よくわからいのですが、
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------
1の値 2の値
3の値
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
-----------------------...続きを読む

Aベストアンサー

SQLPLUSを起動して、

SQL>set linesize 列数

でどうだ。

SQL>show linesize

で確認ができる。

QOracle(オラクル)で、日付時刻型の検索方法について

質問させていただきます。
データベースはオラクルを使っていて、
SQL文で、抽出するときにエラーが出て困っています。

日付時刻型が「2005/05/26 19:13:00」という感じで入ってます。
2005/05/26 を抽出したいのですが、
BETWEEN '2005/05/26 00:00:00' AND '2005/05/26 23:59:59'

だと、エラーでできません。
どなた様か、ご教授よろしくお願いしますm(_ _)m

Aベストアンサー

日付検索を行う場合は、以下のように書式を含める必要があります。

col BETWEEN TO_DATE('2005/05/26 00:00:00','YYYY/MM/DD HH24:MI:SS') AND TO_DATE('2005/05/26 23:59:59','YYYY/MM/DD HH24:MI:SS')

ただ、厳密には

col >= TO_DATE('2005/05/26', 'YYYY/MM/DD')
AND
col < TO_DATE('2005/05/27', 'YYYY/MM/DD')

と書くべきでしょうね。

Qbatファイルで、call使っても戻ってこない

こんにちは
教えてほしいことがあります。

batファイルで他のbatファイルを実行するためにcallで呼び出すと、処理がまた戻ってくる事を知り、
以下のようにやってみたのですが、戻ってきている様子がありません。

どこが間違っているのか教えていただければと思います。

以下file-backup.bat

echo 処理開始 >> %LOG%
date /t >> %LOG%
time /t >> %LOG%

C:\****\Backup\FastCopy198\fastcopy.exe /cmd=force_copy /auto_close /open_window /error_stop=TRUE /log /from_date="-2D" "D:\file2" "/to=\\********\file2"

@echo off
call "Z:\file-backup2.bat"

echo 処理終了 >> %LOG% ←---これ以下がログファイルに表示されない
time /t >> %LOG%
echo. >> %LOG%


ログに「処理終了」が入ってきませんので、callで戻ってきていないと判断しました。

環境はwinserver2008です。

ご教授お願いします。

こんにちは
教えてほしいことがあります。

batファイルで他のbatファイルを実行するためにcallで呼び出すと、処理がまた戻ってくる事を知り、
以下のようにやってみたのですが、戻ってきている様子がありません。

どこが間違っているのか教えていただければと思います。

以下file-backup.bat

echo 処理開始 >> %LOG%
date /t >> %LOG%
time /t >> %LOG%

C:\****\Backup\FastCopy198\fastcopy.exe /cmd=force_copy /auto_close /open_window /error_stop=TRUE /log /from_date="-2D" "D:\file2" "/to=\\*****...続きを読む

Aベストアンサー

>どこが間違っているのか教えていただければと思います。
--> call で戻っている可能性があるのに断定している処。

> ログに「処理終了」が入ってきませんので、callで戻ってきていないと判断しました。
--> それは考えがおかしい。そう思うなら
  echo 処理終了
  とでも変えればいいです。表示されたら戻っている訳ですから。
  そもそも %LOG% には絶対パスでファイル名をセットしていますか?
  多分、カレントが変わってしまっていると予想します。

Qbashなどのシェル変数の値に改行を含める事は可能でしょうか?

タイトルの通りですが、通常のシェル変数の値として

 [prompt]$ aaa="bbb<改行>ccc"

のようなセットを行い、

 [prompt]$ echo $aaa
 bbb
 ccc
 [prompt]$

のような結果を得たいのですが、可能でしょうか。

Aベストアンサー

可能です.
というか,やってみたら出来ることがわかると思います.こんなところで聞くより早い.
なお,sh/bash系では改行文字は特にエスケープせずそのまま入れられます.

aaa='bbb
ccc'

QSELECTで1件のみ取得するには?

こんにちわ。
いまORACLE9iを使用している者です。

ACCESSでは
SELECT TOP 1 項目名 FROM テーブル名
ORDER BY 項目名;
で並べ替えたデータ群のうち,先頭の1件だけを
取ることができますが,
ORACLEでそのような機能(SQL)はあるでしょうか?
教えてください。
よろしくお願いします。

Aベストアンサー

order by と rownum を併用する場合は注意が必要です。

[tbl01]
cola | colb
------------
1000 | aaaa
1001 | bbbb

というデータがある場合、
select cola from tbl01 where rownum < 1 order by cola desc;
とすると、「1001」ではなく、「1000」が返されます。
これは、order by の前に rownum < 1 が適用されてしまうからです。

解決するには、
select aaa from (select cola aaa from tbl01 order by cola desc) where rownum = 1;
とすれば良いです。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報