Bonjour, j'utilise la bibliothèque MPJ dans le programme Java pour l'algorithme Pagerank. Je le compile par
javac -cp .:$MPJ_HOME/lib/mpj.jar MpiPageRank.Java
et dirigé par
mpjrun.sh -np 2 MpiPageRank
où -np
est le nombre de processus
Maintenant je dois trouver son pid
ps -ef|grep Java
comme
mpjrun.sh -np 2 MpiPageRank & sleep 2
ps -ef | grep Java
Je reçois
pnewaska 27866 27837 99 21:28 pts/45 00:00:09 Java -cp /u/pnewaska/mpj-v0_38/lib/smpdev.jar:/u/pnewaska/mpj-v0_38/lib/xdev.jar:/u/pnewaska/mpj-v0_38/lib/mpjbuf.jar:/u/pnewaska/mpj-v0_38/lib/loader2.jar:/u/pnewaska/mpj-v0_38/lib/starter.jar:/u/pnewaska/mpj-v0_38/lib/mpiExp.jar runtime.starter.MulticoreStarter /nfs/nfs1/home/pnewaska/DistributedSystems/Project3 10 smpdev useLocalLoader EMPTY MpiPageRank -i input.500k0 -n 10 -o
Maintenant, je veux extraire MpiPageRank
de seulement 1 comman linux pour obtenir son pid ie 27866
. comment je fais ça ?
ps
ps
permet à l'utilisateur de définir son propre formatage pour sa sortie avec le -o
switch et -C
pour sélectionner les entrées par la commande donnée. J'irais avec:
ps -C Java -o pid
à partir de la page de manuel:
-C cmdlist Select by command name
This selects the processes whose executable name is given in cmdlist.
-o format user-defined format.
format is a single argument in the form of a blank-separated or comma-separated list, which offers a way to specify
individual output columns. The recognized keywords are described in the STANDARD FORMAT SPECIFIERS section below. Headers
may be renamed (ps -o pid,ruser=RealUser -o comm=Command) as desired. If all column headers are empty
(ps -o pid= -o comm=) then the header line will not be output. Column width will increase as needed for wide headers; this
may be used to widen up columns such as WCHAN (ps -o pid,wchan=WIDE-WCHAN-COLUMN -o comm). Explicit width control
(ps opid,wchan:42,cmd) is offered too. The behavior of ps -o pid=X,comm=Y varies with personality; output may be one
column named "X,comm=Y" or two columns named "X" and "Y". Use multiple -o options when in doubt. Use the PS_FORMAT
environment variable to specify a default as desired; DefSysV and DefBSD are macros that may be used to choose the default
UNIX or BSD columns.
On peut obtenir des résultats plus précis en spécifiant plus de restrictions (c'est-à-dire l'utilisateur sous lequel le processus s'exécute, etc.). Consultez la page de manuel pour plus d'informations et d'autres commutateurs.
exemple:
$ sleep 10 &
[1] 12654
$ ps -C sleep -o pid
12654
Je ne sais pas pourquoi vous utilisez un .sh
script pour exécuter votre code et ne pas appeler directement Java
, mais si dans tous les cas vous utilisez le &
(arrière-plan), vous pouvez saisir le pid
via votre Shell, avec le $!
variable.
par exemple:
$ sleep 5 &
[1] 12395
$ echo $!
12395
il en va de même pour le Java -jar .. &
commande, $!
sera défini sur le pid de la dernière tâche en arrière-plan.
Vous pouvez utiliser awk pour obtenir le pid:
ps -ef | grep MpiPageRank | awk '{print $2}'
J'ai remarqué que parfois grep se trouve, pour le supprimer:
ps -ef | grep MpiPageRank | grep -v grep | awk '{print $2}'
jps est le même que ps, sauf qu'il ne regarde que les processus Java.
Si vous avez ensuite besoin du PID, vous pouvez faire quelque chose comme ceci:
jps | grep Java_NAME | awk '{print $1}'
Cela exécute jps, puis utilise grep pour filtrer par l'application Java ou le fichier jar que vous voulez tuer. Après cela, awk capture et imprime uniquement le pid sur la console.
Un moyen simple consiste à exécuter ceci:
pgrep Java