В основном я использовал strace, чтобы узнать, почему процессы, казалось, повесились, и это было очень эффективно. Но теперь я использую его для анализа того, почему некоторая блокировка в программе c не работает. Когда я запускаю его в реальной проблемной программе, я вижу, что каждый процесс блокирует определенный файл с помощью fcntl с опцией, которая должна заставлять процессы позднего запуска ждать, пока предыдущий процесс не разблокируется. strace, похоже, показывает, что каждый процесс проходит, хотя замок уже на месте.strace «не в порядке»
Однако, я сделал свою собственную программу c для процессов fork 4, и если процесс является дочерним процессом, он блокирует /tmp/test.txt, добавляет несколько строк к нему и затем разблокирует файл. Затем я запускаю это с помощью strace, и я вижу результаты, которые в порядке, который я считал бы невозможным. Опять же, идя по strace, каждый процесс, кажется, проходит через блокировку fcntl, даже если другой процесс уже заблокирован. Кроме того, каждый процесс, как представляется, записывает в файл ПОСЛЕ того, что процесс выполнил разблокировку.
Существует, по-видимому, некоторый уровень сложности в том, как выполняется процесс, с которым мне трудно найти документацию. Может кто-нибудь помочь мне на правильном пути?
Кстати, я рассмотрел используемые команды fcntl, и они кажутся очень стандартным, и каждый параметр проверяет документацию. Я использую Centos 6.6.
Спасибо Nithan. Я проверяю время в strace. Старые мозговые цепи медленно просыпаются. – Scott