Com relação a verificar se o processo já está em execução, altero o que você está fazendo um pouco e use pgrep
.
$ pgrep -f Connection_Manager.sh
Exemplo
$ pgrep -f Connection_Manager.sh
16293
A opção -f
permite que pgrep
corresponda a toda a linha de comando e não apenas à primeira parte.
Argumentos da linha de comando
Para isso, você tem alguns métodos. Você também pode tentar analisá-los a partir da saída de pgrep
. Você precisará adicionar uma opção adicional, -a
.
Exemplo
$ pgrep -af Conn
17306 /bin/bash ./Connection_Manager.sh arg1 arg2
Em seguida, use awk
, sed
ou algo semelhante para analisar sua saída.
sed
$ pgrep -af ./Conn | sed 's/.*Connection_Manager.sh //'
arg1 arg2
awk
$ pgrep -af ./Conn | tr '$ ls /proc/19146
attr cmdline environ limits mountinfo numa_maps personality stack task
autogroup comm exe loginuid mounts oom_adj root stat timers
auxv coredump_filter fd map_files mountstats oom_score sched statm wchan
cgroup cpuset fdinfo maps net oom_score_adj sessionid status
clear_refs cwd io mem ns pagemap smaps syscall
0' ' '| awk '{print $4, $5}'
arg1 arg2
Estes 2 métodos estão fora de minha cabeça, eles poderiam, sem dúvida, ser simplificados.
Usando / proc /
Mas, dependendo do número de argumentos e do comprimento, isso pode causar problemas se a linha de comando for excessivamente longa. Então eu provavelmente vou com o segundo método e analiso o conteúdo do arquivo cmdline
do processo. Todo processo tem um conjunto de arquivos dentro do sistema de arquivos do Linux ' /proc
que contém meta informações sobre esse processo.
$ cat -v cmdline
/bin/bash^@./Connection_Manager.sh^@arg1^@arg2^@
Um desses arquivos é o arquivo cmdline
. Mas você tem que prestar atenção especial ao conteúdo deste arquivo. Os argumentos dentro deste arquivo são separados por caracteres NUL. Você pode usar cat -v <file>
para vê-los em uma janela de terminal.
$ xargs -0 < cmdline
/bin/bash ./Connection_Manager.sh arg1 arg2
Isto substitui ^@
no lugar do NUL.
Portanto, a análise do conteúdo pode ser feita de várias maneiras, um método é discutido na resposta do @ Joesph, usando xargs -0 ...
. Outro está usando cat -v
.
Exemplos
xargs
$ cat -v cmdline
/bin/bash^@./Connection_Manager.sh^@arg1^@arg2^@
gato
$ cat -v cmdline | sed 's/\^@/ /g'
Você pode usar sed
para limpar este segundo método.
$ pgrep -f Connection_Manager.sh