- ベストアンサー
[Unix初心者]「ps|grep netscape|cut -f1|kill」がうまくいかない原因は?
- 現在起動しているnetscapeを終了するための手順がわからない。
- psコマンドでnetscapeのプロセスIDを調べ、その番号をkillすれば終了できるが、ps|grep netscape|cut -f1コマンドがうまく動かない。
- 「起動しているnetscapeは1つとは限らず、かつハイブを利用すべき」という応用問題に取り組んでいて、ps|grep netscape|cut -f1コマンドでプロセスIDのリストを取得しようとしているが失敗している。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 いい線行ってますね。 しかし、、、惜しいです。ちょっとちがいます。 -cオプションで指定する数字は、左端が 1 です。 psの出力をよく見てみてください。 それから、killコマンドは、対象pidをコマンドラインからとります。 ですから、pidをパイプを使って標準入力に流しても無視されてしまいます。 こういうときは、シェルの『コマンド行置換』という機能を使います。 今回のヒントはここまでです。がんばってくださいね。
その他の回答 (1)
- shige_70
- ベストアンサー率17% (168/946)
cutの -f オプションは、デフォルトではフィールド区切りがタブになっています。したがって、cutでフィルタにかけても、psの出力はタブを含まないため元の出力がすべて第1フィールドとしてそのまま出てきてしまいます。 じゃあデリミタをスペースにすれば良いかというとそういうわけにもいかないんです。 pidは通常5桁までありますので、4桁未満のものは前をスペースで埋めてあります。だから、最初からスペースが来てしまうと第1フィールドが空ということでcutを通した結果は空っぽになってしまいます。 psの出力はカラムがびしっと揃っているので、やはりcutは -f ではなくて、、、ヒントということですのでここまでにしておきます。がんばってください。 ちなみにpsは、オプションなしだと、そのターミナルから起動したプロセスしかでてこないので注意です。 あと、tcshは関係ないでしょう。
お礼
こんなところで済みませんが 補足欄をすでに埋めてしまったのでここで返答させてください。 さて、現在学校のマシンで実験してみました 結果は失敗でした 一応 ps|grep netscape|cut -c2-6 #cut -c1-5でなく-c2-6のようですね(汗) で行ってみると 番号のみの出力に成功...したのですが、 これをps|grep netscape|cut -c2-6|kill と渡したところ、 Too few arguments. との表示。 多分「引数が足りない」と言う意味であっていると思うので killのオプションを念のため再確認して、適当に ps|grep netscape|cut -c2-6|kill -15 とか ps|grep netscape|cut -c2-6|kill -9 としてみたりしたところ、 メッセージは表示されませんでした....が終了もされてない ....なにが原因なのでしょうか?
補足
うーん、とりあえず課題提出は木曜日だし 実験できる時間はあるので 今日は予測だけ。 >あと、tcshは関係ないでしょう。 でしょうね。 「コマンドの記載方法がシェルによって大きく異なる」 って話を聞いていたので 一応念のために記載しておいたのです >ちなみにpsは、オプションなしだと、 >そのターミナルから起動したプロセスしか >でてこないので注意です。 了解しました。確認しておきます で、予測ですが 5文字であることは確定しているのだから 「ps|grep netscape|cut -c1-5|kill」 かなぁ?
お礼
「コマンド行置換」で調べてみました で kill 'ps|grep netscape|cut -c1-6' 注)バッククオートがうまく打てなかったので アポストロフィで代用 結果、無事完了です。 回答ありがとうございました。