こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

javaのプロセスについて

UnixやLinuxなどで、javaのプロセスを常駐させたいのですが、何か方法はありますでしょうか。
javaという名前であれば何でもいいので、テスト的に起動したいです。
(プロセスをkillするテストをするために、使用します)

投稿日時 - 2019-04-07 23:29:13

QNo.9604633

困ってます

質問者が選んだベストアンサー

下記のようにするとjavaという名前のプロセスが10分間走り続けます。10mの部分を3hに変えれば3時間になります。
$ cp /bin/sleep /tmp/java
$ /tmp/java 10m

投稿日時 - 2019-04-09 18:19:26

補足

sleepコマンドをjavaにリネームして実行するということですね。
試してみましたが、psで確認した時にコマンドが/tmp/javaとなり、psで表示されるときのコマンドはjavaのみとしたいため、/直下で実行することになりそうです。(以下のコマンドでkillするためです。以下のコマンド自体は変えられません)
ps -eo pid,comm | awk '$2=="java" {print "kill -9" $1}'

確認ですが、教えて頂いたコマンド実行時に、他への影響等はあるのでしょうか?本番環境で実行するため、念のための確認です。

投稿日時 - 2019-04-11 00:19:53

お礼

先日、本番環境で実行し想定通りの結果が得られました。
ご回答ありがとうございました。大変助かりました。

投稿日時 - 2019-04-27 11:07:33

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(6)

ANo.6

> sleepコマンドは「指定した時間だけ処理を停止する」というコマンドの認識ですが、それが他の処理に影響するということはありますか?例えば、他の処理も指定した時間だけ停止してしまうなど・・・。

それを質問するレベルの人が本番環境で作業するのは不安を覚えます。悪いことは言わないので、本番環境とは別のところでテストしてください。
sleepコマンドで寝るのはそれ自身のプロセスです。他のプロセスのスケジューリングには影響しません。

投稿日時 - 2019-04-12 08:33:34

お礼

>>それを質問するレベルの人が本番環境で作業するのは不安を覚えます。悪いことは言わないので、本番環境とは別のところでテストしてください。
実力不足なのは重々承知しています・・・。
本番環境でいきなりテストしないのは当然です。まずは開発環境でテストをする予定です。

>>sleepコマンドで寝るのはそれ自身のプロセスです。他のプロセスのスケジューリングには影響しません。
他への影響は無いということですね。承知しました。

投稿日時 - 2019-04-13 05:59:51

ANo.5

テスト用のコードを書き込んだのかもしれませんが、回答No.2の補足にある
ps -eo pid,comm | awk '$2=="java" {print "kill -9" $1}'
では、"kill -9 プロセスID"の文字列がprintされるだけで、実際にプロセスをkillすることはありません。
psもawkも使わず"killall java"だけで目的を果たせそうに思いますが、killallを使わない理由はありますか?

投稿日時 - 2019-04-11 22:31:55

お礼

ご指摘ありがとうございます。以下が正しいコマンドでした。
ps -eo pid,comm | awk '$2=="java" {print "kill -9" $1}' | sh

諸事情で上記のコマンド自体は変更ができませんので、killに関しては、このコマンド(が記載されたシェル)で実行する予定です。

投稿日時 - 2019-04-13 05:56:24

ANo.4

回答No.2の者です。

> psで表示されるときのコマンドはjavaのみとしたいため、/直下で実行することになりそうです。

その場合、/直下で実行することは解決になりませんね。javaの在処をPATHに追加してください。
プロセスを殺すのにkillallコマンドが使えればいいのですけど、変更不可ということなので。

> 確認ですが、教えて頂いたコマンド実行時に、他への影響等はあるのでしょうか?本番環境で実行するため、念のための確認です。

sleepコマンドを実行した場合と同じだけの影響があります。CPU時間もメモリもわずかですが消費します。
PATHを変更する場合はその副作用にも気をつけてください。/tmpを優先するようにすると、本来のjavaをパス指定なしでは実行できなくなります。

投稿日時 - 2019-04-11 08:38:35

補足

>sleepコマンドを実行した場合と同じだけの影響があります。
すみません。もう少しだけ教えてください。
sleepコマンドは「指定した時間だけ処理を停止する」というコマンドの認識ですが、それが他の処理に影響するということはありますか?例えば、他の処理も指定した時間だけ停止してしまうなど・・・。

CPUやメモリの消費については、すぐにkillコマンドを実施するつもりなので、あまり影響はないと考えています。

投稿日時 - 2019-04-11 22:37:53

ANo.3

No.1で回答した者です
ここって技術者向けのカテゴリですが、プログラムを書いたことがないってことですか?つまりソフトウェアの開発者ではないってことですか。

No.2様の回答に有るようなシェルで実現することは、スキル的に可能なのでしょうか。
私の書いた方法だと、コンパイラ等の最低限の開発環境が必要ですが、それらは準備されてますか?ここで実際にプログラムを書いて、ビルドする方法も書く必要はありますか?

投稿日時 - 2019-04-09 20:47:41

お礼

ご回答ありがとうございます。
まだ確認中ですが、No.2様の回答で実現可能だと思われます。

投稿日時 - 2019-04-11 00:12:29

ANo.1

javaと言う名前であれば何でも良いってことは、javaって名前の常駐アプリを作って実行するとか、既存の常駐アプリの名前をjavaにするとかでも良いってことですか。tomcatとかeclipseなんかをダウンロードして起動すればjavaが常駐しますし、javaで永久ループでも書いて実行すればそれでもできますよね。

投稿日時 - 2019-04-07 23:48:04

補足

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

>javaって名前の常駐アプリを作って実行するとか
>javaで永久ループでも書いて実行すればそれでもできますよね。
本番環境なので他のアプリをダウンロードしたり、既存アプリの名前変更等はできないため、まさに上記2つの方法を知りたいです。

投稿日時 - 2019-04-09 01:15:04

あなたにオススメの質問