ID do processo de impressão (PID) de uma instância do Matlab

3

Para executar meus scripts do Matlab, criei um script de shell para o qual forneço dois parâmetros - o caminho para o arquivo matlab ( $1 ) e para o arquivo de log ( $2 ):

nohup time matlab -some_parameters -r "run $1;exit" &>> "$2" &

Quando eu preciso matar um dos processos do Matlab, às vezes é difícil dizer qual é qual. Seria possível de alguma forma incluir o pid do processo Matlab no arquivo de log (ou seja, em $2 )?

    
por John Manak 16.05.2013 / 14:06

3 respostas

1

No final, parece que o comando Matlab está subseqüentemente abrangendo outros processos (JVM) quando chamado. No entanto, há uma função não documentada feature que retorna o PID do processo em execução do Matlab:

nohup time matlabR2012b -nodesktop -nosplash -nodisplay \
  -r "fprintf('PID: %s\n', num2str(feature('getpid')));run $1; exit" &> "$2" &
    
por 16.05.2013 / 15:59
3

Existem várias maneiras de marcar as instâncias de um processo. Você pode fazer isso por meio do nome do comando na lista de processos (por exemplo, matlab_1 em vez de matlab ) ou por meio de uma variável de ambiente. Usar o PID também é possível. Você só precisa dar saída antes que matlab seja iniciado:

nohup time bash -c 'echo $$; exec matlab -some_parameters -r "run '"$1"';exit"' &>> "$2" &

Editar 1:

$$ é o PID do shell, mas devido ao processo exec the matlab apenas sobrescreve o processo do shell, ou seja, o PID não muda. exec significa que no final do programa chamado não há salto de volta para o shell; porque não há mais shell.

Para obter uma explicação sobre as outras opções que mencionei, consulte minha resposta para esta questão .

    
por 16.05.2013 / 14:40
0

Existe uma maneira de obter o pid, mas defini-lo como a primeira linha pode ser um pouco complicado, pois assim que o processo for iniciado, ele começará a gravar no arquivo de log.

Assumindo que o objetivo aqui não é definir a primeira linha como pid mas saber o pid para matar o processo, assim que você tiver feito nohup, você pode salvar o pid do comando em um arquivo pid e matar usando isso.

nohup some_command some_parameters &
echo $! > matlab_program_1.pid
kill 'cat matlab_program_1.pid'
    
por 16.05.2013 / 14:41