Как отобразить процесс, в настоящее время содержащий семафор? - PullRequest
9 голосов
/ 11 сентября 2009

В пользовательском пространстве Linux у меня есть процесс, блокирующий семафор, как обнаружил strace. Как только возникает ошибка, блокировка повторяется, поэтому должен быть другой процесс, который удерживает семафор и не освобождает его.

Есть ли способ узнать, какой другой процесс в настоящее время содержит семафор?

ipcs перечисляет семафор, также как и / proc / sysvipc / sem. Где я могу найти информацию о процессе проведения?

Ответы [ 5 ]

5 голосов
/ 11 сентября 2009

Семафоры не являются мьютексами. Вы не «держите» их. Если процесс заблокирован, это означает, что он ожидает, что кто-то еще выполнит над ним операцию «вверх» или «V» в будущем. Не существует инструмента ядра, который бы сообщал вам о будущем поведении программного обеспечения.

3 голосов
/ 18 мая 2016

Чтобы найти пиды, связанные со списком семафорных массивов, перечисленных ipcs -s, вы можете запустить это:

for pid in $( for semid in $( sudo ipcs -s | awk '/0x/{ print $2 }' ); do sudo ipcs -s -i $semid | tail -2 | head -1 | awk '{print $5}'; done | sort -u ); do ps uh -p $pid; done
3 голосов
/ 12 сентября 2009

Возможно, есть более простой способ, но вы можете использовать вызов semctl () с помощью команды GETPID. Это должно вернуть процесс, который выполнил последний вызов semop () для семафора. Это может быть или не быть вашим мошенническим процессом, но, вероятно, это хороший намек.

1 голос
/ 22 ноября 2015

«ipcs -p» не может отображать семафоры процесса, который является удержанием, это должно быть ошибкой, или это предел, потому что его трудно показать. Вы должны сделать запрос по самому себе.

  1. запустите "ipcs -s", чтобы получить все полусферы
  2. для каждого полугодового прогона "ipcs -s -i"
  3. за каждую семнум, чтобы получить владелец pid, если владелец pid желает, то покажите текущие semid и semnum.

Примечание: если процесс просто читает семафоры, вы можете не получить такую ​​информацию с помощью команды ipcs.

0 голосов
/ 11 сентября 2009

Вы пробовали

ipcs -p
...