В дополнение к определенному для Java предложению Nikhil jps
и предложение Rory для рассмотрения журнала:
Можно искать процесс в выводе htop
(или top
, который имеет более дрянной UI). Вы будете видеть, сколько процессорного времени это в настоящее время использует.
Можно проследить процесс с strace
(на Linux или некотором эквиваленте такой как trace
или dtrace
или ktrace
на других нельдах): strace -p1234
где 1234 является идентификатором процесса. Это скажет Вам, если процесс сделает что-то (который может или не может быть чем-то полезным), или если это заблокировало ожидание входа где-нибудь.
Причина Вы не получаете корректный код ошибки, состоит в том потому что local
на самом деле последняя выполняемая вещь. Необходимо объявить переменную как локальную до выполнения команды.
local RESULTS
RESULTS=$(ssh user@server /usr/local/scripts/test_ping.sh)
echo $?
Вы видите проблему здесь:
$ bar() { foo=$(ls asdkjasd 2>&1); echo $?; }; bar
2
$ bar() { local foo=$(ls asdkjasd 2>&1); echo $?; }; bar
0
$ bar() { local foo; foo=$(ls asdkjasd 2>&1); echo $?; }; bar
2
"Локальное", кажется, проблема. Это работает на меня:
local RESULTS
RESULTS=$(ssh user@server /usr/local/scripts/test_ping.sh)
echo $?
На самом деле, ни один из приведенных выше ответов не перехватывает код ошибки и сообщение ssh, что можно сделать следующим образом (игнорировать мои пользовательские переменные и функции):
# move the deployment package from the tmp dir
msg=$(ssh -i "$(eval echo $identity_file)" -o ConnectTimeout=5 "$ssh_user"'@'"$ssh_server" \
sudo -iu "$etl_user" bash "$tgt_deployment_dir"'/src/bash/'"$run_unit/$run_unit"'.sh' \
-a create-relative-package 2>&1)
# fail on any non-success
export exit_code=$?
export err_msg="network error: ""$msg"
test $exit_code -ne 0 && echo "$err_msg" && exit $exit_code