이를 수행하는 휴대용 방법이 있습니까?
Linux에서는 가능 ps a -N
하지만 다른 (POSIX) 시스템에서는 이 옵션을 사용할 수 없습니다.
물론 grep '^?'
함께 사용할 수 있지만 -o tty,...
더 안정적인 것이 있습니까?
답변1
Standard를 ps
사용하면 해당 옵션을 사용하여 모든 프로세스에 대한 정보를 얻고 필드 와 같은 -A
특정 필드를 얻을 수 있습니다 .-o
TTY
문제는 TTY 필드의 문자열 형식이 시스템마다 다르다는 것입니다. Linux에서 TTY를 제어하지 않는 프로세스는 TTY를 ?
FreeBSD에서 사용하고 -
macOS와 OpenBSD에서 모두 사용하는 으로 보고합니다 ??
.
시스템을 사용하여 ps
이 작업을 수행하려면 먼저 터미널 없이 프로세스를 식별하기 위해 찾아야 할 문자열을 결정할 수 있습니다.
ps -p 1 -o tty=
PID 1이 제어 터미널이 없는 기존 프로세스라고 가정하고 이 방법을 사용할 수 있습니다 . 이는 FreeBSD 뿐만 아니라 ?
Linux, macOS, OpenBSD에서도 출력됩니다 . 그런 다음 해당 문자열을 사용하여 출력을 필터링할 수 있습니다 .??
-
ps -A -o tty,pid
아래 명령에서는 ps
명령 출력에서 공백도 모두 제거했습니다.
ps -A -o tty,pid |
awk -v t="$(ps -p 1 -o tty= | tr -d '[:blank:]')" '$1 == t { print $2 }'
이는 PID 1이 존재하지 않고 Busybox 기반 시스템에서 작동하지 않는다는 점을 제외하고(Busybox 구현에는 옵션이 ps
없기 때문에 -p
) 대부분의 장소에서 작동합니다.