Какой процесс занятие является определенным псевдотерминалом pts/X?

Можно изменить порядок сортировки в zsh globbing (см. ответ Gilles), но ls отсортирует его аргументы так или иначе, и по умолчанию лексикографически.

Если Ваш ls GNU ls, можно использовать -v опция отсортировать численно:

ls -1v

Или:

ls -1vd -- *

Это не эквивалентно sort -h потому что sort -h должен отсортировать вещи как вывод du -h, это то, где 1.12G больше, чем 999M, в то время как ls -v и zsh (n) спецификаторы globbing приспособлены к сортировке вещей как номера версий (где 1.20 больше, чем 1,4, например).

Если Вы действительно хотите globbing, которые понимают, что это достаточно, необходимо было бы записать zsh функцию вида для этого.

С zsh можно определить порядок сортировки шарика с функцией и использовать его как *(o+that-function). that-function берет имя файла к виду в $REPLY переменная и должна возвратиться в ту же самую переменную, что-то это zsh может затем отсортировать лексикографически (или численно если n также обеспечивается).

Что-то как:

h() {
  local -A x
  local match
  setopt localoptions extendedglob
  x=(k 1 K 1 M 2 G 3 T 4 P 5 E 6)
  REPLY=${REPLY//(#b)((|[0-9]#.)[0-9]##)([${(kj::)x}])/$((match[1]*2**$x[$match[3]]0))}
}

был бы заменять весь 1.1G к их значению (1181116006.4).

Который можно затем использовать как:

ls -1Ud -- *(no+h)

(-U быть GNU ls опция сказать ls не отсортировать его аргументы).

Это не будет работать хорошо однако с числами с дробной частью, поскольку она отсортировала бы 1.20 после 1.3 например:

$ ls
1.20  1.3  3.1G  500M
$ ls -v1Ud -- *(no+h)
1.3
1.20
500M
3.1G

Для чего-то, что отсортировало бы все виды десятичных плавающих чисел с дополнительным, достаточен (как-1e20M, 1E-20, 100k, 3000M), потому что zsh может только отсортировать лексикографически или численно ограниченный положительными десятичными целыми числами, нам была бы нужна функция для преобразования целых чисел или в строки что вид лексикографически в том же порядке или в положительные десятичные целые числа что вид численно в том же порядке.

zsh делает и десятичную систему счисления с плавающей точкой с числами на 64 бита где это возможно, таким образом, мы могли применить функцию с плавающей точкой, которая поворачивает те числа (или по крайней мере диапазон, поддерживаемый zsh плавания) в целое число от 0 до 263. Используя логарифм функция могла быть опцией. Что-то как:

zmodload zsh/mathfunc
h() {
  local -A x
  local match v
  setopt localoptions extendedglob
  x=(k 1 K 1 M 2 G 3 T 4 P 5 E 6 Z 7 Y 8)
  REPLY=${REPLY//(#b)([-+]|)(([0-9]#.|)[0-9]##([eE]([-+]|)[0-9]##|))\
([${(kj::)x}]|)/[$(([#10]1e15*(1500+ $match[1](745+log((v=$match[2]\
${${match[2]##*[Ee.]*}:+.}*2.**$x[$match[6]]0)==0?2.48e-324:v)))))]}
}

Использоваться как:

print -rl -- *(no+h)

Или, для отступания к числовой сортировке для дифференциации 100000000000000001 и 100000000000000002, например (которые имеют тот же логарифм с zsh точность плавающая):

print -rl -- *(noe:h:on)

Затем мы получаем что-то еще лучше, чем sort -h:

$ ls | sort -h
-4
-3
+20
a2
b1
b10
b2
1e-20Y
1e3
1.20
1.3
3
20
999
1000 1e9
1000 900M
1001
1024
1k
12k
0.000000001G

$ print -rl -- *(noe:h:on)
-4
-3
0.000000001G
1.20
1.3
3
20
+20
999
1e3
1000 900M
1000 1e9
1001
1k
1024
1e-20Y
12k
a2
b1
b2
b10

Теперь, для Вашей определенной nyxmms2 проблемы, для дополнения ответа Gilles я Вы - ленивая машинистка, Вы могли также определить на этот раз выбор (вместо того, чтобы "заказать") функция для музыкальных файлов, как:

m() [[ $REPLY == (#i)*.(mp3|ogg)(-.) ]]

nyxmms2 *Zep*(n+m)

Или использование переменная:

m='.(#i)(mp3|ogg)(n-.)'
nyxmms2 *Zep*$~m

Или глобальный псевдоним:

alias -g @m='./*.(#i)(mp3|ogg)(n-.)'
nyxmms2 @m

Включать numericglobsort для nyxmms2 только, Вы могли сделать:

preexec() {[[ $1 = nyxmms2* ]] && setopt numericglobsort}
precmd setopt nonumericglobsort

7
10.02.2014, 02:22
2 ответа

Если у вас установлен fuser и у вас есть разрешение на использование sudo:

for i in $(sudo fuser /dev/pts/0); do
    ps -o pid= -o command= -p $i
done

например:

24622 /usr/bin/python /usr/bin/terminator
24633 ksh93 -o vi
4
27.01.2020, 20:19

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

В качестве суперпользователя я сделал cd / proc и ввел следующую команду bash:

for pid in [0-9]* ; do  \
    RES=`ls -l $pid/fd/* 2>/dev/null| grep pts/0`; \
    if [ -n "$RES" ]; then echo "Process $pid owns: $RES"; fi; \
done

Таким образом я понял, что в моем случае pts / 0 занят процессом / usr / sbin / bumblebeed .

1
27.01.2020, 20:19

Теги

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