Ваш выходной формат запущен для абзаца Perl, хлебайте:
pbsnodes|perl -n00le 'BEGIN{ $sum = 0 }
m{
state \s* = \s* free \s* \n
procs \s* = \s* ([0-9]+)
}x
and $sum += $1;
END{ print $sum }'
Примечание:
Это только работает, потому что идея Perl "абзаца" является блоком непустых строк, разделенных одной или несколькими пустыми строками. Если у Вас не было пустых строк между node
разделы, это не работало бы.
См. также
Может быть, я уже перестал упрощать, но ты можешь просто сделать это?
ps -p <pid> -F tty
Вот пример:
$ ps -p 6947010
PID TTY TIME CMD
6947010 pts/0 0:00 ksh
$ ps -p 6947010 -F tty=
pts/0
Вот как можно определить, разрешать или запрещать доступ к определенному процессу:
Сначала вы определяете, кому принадлежит процесс и какое pts-устройство его запустило, используя:
$ ps -p <PID> -F tty=,user=
pts/X <username>
Затем вы проверяете, кто является владельцем pts/X-устройства, вот так:
$ ls -l /dev/pts/X
crw--w--w- 1 <username> <group> 21, 0 Apr 18 13:27 /dev/pts/0
Если владелец /dev/pts/X тот же самый, что и владелец процесса, то процесс был запущен пользователем с логином, и вы разрешаете доступ, если владелец устройства /dev/pts/X не тот же владелец, что и владелец процесса, то вы запрещаете доступ.
Странно это не получил должного ответа раньше.
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
int main(int argc, char **argv)
{
struct stat sb;
stat(argv[1], &sb)
printf("%d\n", sb.st_uid);
}
Он переносится между U * x и избегает utmp. Поздно, но может помочь другим.
Если вам нужно имя пользователя:
#include <pwd.h>
...
printf("%s\n", getpwuid(sb.st_uid)->pw_name);
Если есть pts, я предполагаю, что он интерактивный, то есть псевдотерминал, такой как pts. Я использую это в своем аудиторе bash на серверах, он даст вам имя пользователя, даже если пользователь сделал sudo su -
, чтобы переключиться, например, на root.
stat -c %U $(tty)
tty
имя, т.е./dev/pts/0
После расширения оболочки $(tty)
это выглядит так, как показано ниже
stat -c %U /dev/pts/0
Если бы вы зашли на ls -l /dev/pts
, то увидели бы владельцев всех псевдотерминалов.