Alternativa para 'pkill' ou 'pgrep -f' no cygwin?

5

Suponha que eu tenha iniciado meu processo como:

java -DSOME_STRING -jar foo.jar

Então no linux, eu posso usar o seguinte para encontrar ou matar este processo:

pgrep -f SOME_STRING
pkill -f SOME_STRING

No entanto, isso não parece funcionar no cygwin. Alguém pode sugerir uma alternativa para essas ferramentas no cygwin?

    
por toolkit 24.08.2011 / 23:10

3 respostas

12

pkill e pgrep certamente existem no Cygwin, no pacote procps (você pode pesquisar cygwin pacotes aqui ).

Parece funcionar para mim,

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:~$

e

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:~$

Atualização: ok, testado com java. A execução de java a partir da linha de comando do Cygwin não resulta na colocação da string java em /proc/<pid>/cmdline , que contém apenas -bash . Esta parece ser uma limitação do 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

Suspeito, portanto, que a resposta é que você não pode fazer isso com uma ferramenta do Cygwin, você precisaria de uma ferramenta específica do Windows.

    
por 25.08.2011 / 00:29
4

Os utilitários do Cygwin funcionam como os do Linux, mas funcionam apenas nos processos do Cygwin. Para processos do Windows, você precisa usar os utilitários do Windows, como os de Sysinternals . O PsKill pode matar processos pelo nome.

    
por 26.08.2011 / 01:35
2

Em versões mais antigas do Cygwin, há um pacote procps que você pode instalar para obter a mesma funcionalidade com os mesmos comandos.

Nas versões mais recentes do Cygwin, o pacote procps não existe mais e é substituído pelo pacote procps-ng .

    
por 25.08.2011 / 00:02

Tags