Minoru слушайте, я чего-то фундаментального не понимаю, видимо. Есть программа на Си, она открывает файл, пишет в него чиселко, закрывает файл и завершается. Эта программа запускается из скрипта, который запускает программу, дожидается её завершения, проверяет её exit code, после чего открывает и читает созданный программой файл. Почему-то иногда файл оказывается пустым, хотя последующая ручная проверка (с помощью cat) показывает, что данные в файле есть. Вопрос: как это вообще возможно?
насколько я помню, FS может делать flush асинхронно. Где-то была статейка на эту тему...
Minoru магия чатика работает. Я разобрался со своим «фундаментальным непониманием». Оказалось, что программа на Си *форкается*, и файл пишет уже потомок. При достаточной нагрузке на машину потомок пишет файл уже *после* того, как завершился предок. Т.к. вызывающий скрипт смотрит именно на предка, то и файл он читает слишком рано
Minoru я, кстати, вначале тоже подумал про flush, но успокоился, когда увидел в коде на Си вызов fclose — он делает fflush, т.е. пишет из буфера программы в буффер ОС. А уж к буфферу ОС все имеют доступ, и не важно, добрались данные до диска или нет
хм, а оно при такой конфигурации в init будет говорить о том что сдохло? Я плаваю, тк подзабыл это дело, но помнится там как-то надо специально отрывать ребенка от родителя, и пришивать к init
а родитель же должен дожидаться ребенка, или у тебя зомбяки потекут, не?
Емнип они репарентятся. Я читал что для демонизации так специально делают, запускается процесс который запускает демона и умирает, демон рапарентится к системе и крутится себе дальше.