次のプロセスを開始したとしましょう。
java -DSOME_STRING -jar foo.jar
その後、Linuxでは、次のコマンドを使用してプロセスを検索または終了できます。
pgrep -f SOME_STRING
pkill -f SOME_STRING
しかし、これはcygwinでは動作しないようです。誰もがcygwinでこれらのツールの代替案を提案できますか?
答え1
pkillとpgrepは間違いなくCygwinに存在します。プロセスパッケージ(cygwinパッケージを検索できます。ここ)。
私には効果があるようですが、
tony:~$ nohup sleep 100983 &
[1] 5476
tony:~$ nohup: ignoring input and appending output to `nohup.out'
tony:~$
tony:~$ ps -ef | grep sleep
tony 5476 2696 2 23:28:53 /usr/bin/sleep
tony:~$ pkill -f sleep
[1]+ Terminated nohup sleep 100983
tony:~$
そして
tony:~$ nohup sleep 837746 &
[1] 228
tony:~$ nohup: ignoring input and appending output to `nohup.out'
tony:~$ pgrep -f 837746
228
tony:~$ pkill -f 837746
[1]+ Terminated nohup sleep 837746
tony:~$
アップデート:いいですね。 javaでテストしました。 Cygwinコマンドラインからjavaを実行すると、Java文字列は含まれずに/proc/<pid>/cmdline
含まれます-bash
。これはCygwinの制限事項のようです。
tony:~$ java -Dsomething=valid -jar Captor.jar &
[1] 2700
tony:~$ ps -ef
UID PID PPID TTY STIME COMMAND
tony 4164 1 ? Aug 21 /usr/bin/mintty
tony 4676 4164 0 Aug 21 /usr/bin/bash
tony 5776 4676 0 Aug 23 /usr/bin/ssh
tony 5148 1 ? 23:53:03 /usr/bin/mintty
tony 5332 5148 1 23:53:03 /usr/bin/bash
tony 5816 1 ? 00:04:16 /usr/bin/mintty
tony 5432 5816 2 00:04:16 /usr/bin/bash
tony 2700 5432 2 00:04:34 /cygdrive/c/Windows/system32/java
tony 2232 5432 2 00:04:39 /usr/bin/ps
tony:~$ pgrep -f something
tony:~$ cat /proc/2700/cmdline
-bash
tony:~$
tony:~$ cat /proc/2700/exename
/cygdrive/c/Windows/system32/java
したがって、Cygwinツールを使用してこれを行うことはできず、Windows専用ツールが必要であるという答えが出ているようです。
答え2
以前のバージョンのCygwinでは、procps
パッケージをインストールして同じコマンドを使用して同じ機能を取得できます。
最新のCygwinバージョンでは、このprocps
パッケージはもう存在しなくなり、packageに置き換えられますprocps-ng
。