Получить информацию о процессе (команду и т. Д.) Из pid

Если у вас есть root-доступ, вы можете изменить режим чтения / записи с помощью.

$ sudo chmod 777 Private.file // Он даст вам все права на чтение, запись и выполнение.

А также, если хотите, вы тоже можете сменить владельца.

$ sudo chown Боб: Боб Privat.file // он изменит владельца файла, и теперь владельцем является Боб

Дополнительные сведения

$ man chmod

$ man chown

​​
0
24.03.2018, 15:55
3 ответа

Как указано , вы не можете использовать psв несуществующем -процессе.

Если у вас bashподдерживает ассоциативные массивы:

declare -A jobinfo

# collect job information
joblist=( $(jobs -p) )
for pid in "${joblist[@]}"; do
    jobinfo["$pid"]="$( ps -p "$pid" -o args= )"
done

# later...

# wait for jobs
err=0
for pid in "${joblist[@]}"; do
    if ! { wait "$pid" || ! (( code=$? )); }; then
        printf 'Got non-zero exit status (%d) from PID %d: %s\n' \
            "$code" "$pid" "${jobinfo[$pid]}"
        err=1
    fi
done

# exit 0 if all was good, exit 1 otherwise
exit "$err"

Здесь я собираю все необходимые данные, прежде чем начать ждать завершения работы. Я также жду завершения всех заданий, чтобы пользователь получил информацию не только о первом неудачном задании.


Без использования ассоциативных массивов (должно работать по умолчанию bashв macOS):

# collect job information
joblist=( $(jobs -p) )
for pid in "${joblist[@]}"; do
    jobinfo+=( "$( ps -p "$pid" -o args= )" )
done

# later...

err=0
i=0
for pid in "${joblist[@]}"; do
    if ! { wait "$pid" || ! (( code=$? )); }; then
        printf 'Got non-zero exit status (%d) from PID %d: %s\n' \
            "$code" "$pid" "${jobinfo[$i]}"
        err=1
    fi

    i=$(( i + 1 ))
done

exit "$err"
0
28.01.2020, 02:23

Если ваша ОС (, например. Linux )имеет каталог /proc, вы можете получить всю необходимую информацию из /proc/$PID

for PID in $(jobs -p); do
    dosomethingwith /proc/$PID/ # please take a look at what it contents ;-)
    done
0
28.01.2020, 02:23

В тот момент, когда вы запускаете команду ps, процесс уже завершился (, вы обрабатываете его код возврата, верно?)

Просто измените логику, чтобы вы запускали команду psраньше в скрипте, перед waitи сохраняли ее в переменной:

for job in $(jobs -p); do
    process_info=$(ps -p "${job}" -o args=)
    wait "${job}" || {
        code=$?
        echo "Job running [${process_info}] failed with exit code ${code}." >&2
        exit 1
    }
done
3
28.01.2020, 02:23

Теги

Похожие вопросы