Expandindo meu comentário acima, você pode usar /proc/<pid>/cmdline
para obter as informações de seu interesse. Note que os tokens são delimitados por caracteres NIL, então você terá que processar a saída um pouco:
cat /proc/<pid>/cmdline | tr "$ cat foo.sh
#!/bin/bash
echo $(cat "/proc/$$/cmdline" | tr "$ bash foo.sh
bash foo.sh
$ ./foo.sh
/bin/bash ./foo.sh
$ ./foo.sh 1 2 3 4
/bin/bash ./foo.sh 1 2 3 4
" " ")
" " "
Então, se por exemplo eu tenho:
$ ls -l /proc/$$/exe
... /proc/12345/exe -> /bin/bash
Aqui estão algumas amostras:
cat /proc/<pid>/cmdline | tr "$ cat foo.sh
#!/bin/bash
echo $(cat "/proc/$$/cmdline" | tr "$ bash foo.sh
bash foo.sh
$ ./foo.sh
/bin/bash ./foo.sh
$ ./foo.sh 1 2 3 4
/bin/bash ./foo.sh 1 2 3 4
" " ")
" " "
Note que nem sempre você obtém o caminho completo para o binário. Para isso, você poderia olhar para /proc/<pid/exe
:
$ ls -l /proc/$$/exe
... /proc/12345/exe -> /bin/bash
Isso pode não ser o que você procura, eu simplesmente não entendo como olhar os descritores de arquivos abertos vai lhe dar o que você quer.