На ум приходит пара возможных решений. Они не получают процессорное время точно после первого вывода, но они могут избежать проблемы, с которой вы имеете дело.
Первое - это избавиться от сценариев bash и просто выполнить эквивалентную работу в вашей программе перед запуском кода пользователя (например, между fork()
и exec()
). Таким образом, время процессора дочернего процесса от wait4()
не включает ваши дополнительные настройки.
Другая возможность - написать простое приложение, которое не выполняет ничего, кроме запуска приложения пользователя и сообщает о времени своего процессора вашему основному приложению. Это приложение для запуска может затем вызываться из ваших сценариев для запуска программы пользователя, а не для непосредственного вызова программы пользователя. Приложение запуска может само использовать fork()
/ exec()
/ wait4()
для запуска программы пользователя и может сообщать информацию из wait4()
в вашу основную программу с помощью любого из множества средств, таких как именованный канал, сообщение очередь, сокет или даже просто запись информации в файл, который ваша основная программа может открыть позже. Таким образом, ваши bash-скрипты могут работать как до, так и после запуска пользовательской программы, которая не будет включена в процессорное время, сообщаемое приложением бегуна. Вы, вероятно, захотите, чтобы бегун принял аргумент, такой как имя канала или выходной файл, в дополнение к пути и аргументам пользовательской программы, чтобы вы могли контролировать, как сообщается информация - таким образом, вы можете запустить более одного экземпляр приложения Runner и по-прежнему хранит информацию, которую они сообщают отдельно.
Если вы делаете хотите включить работу, проделанную сценарием, но не время, затраченное на загрузку bash
, тогда вы могли бы сигнализировать основной программе, передавая что-то в канал из скрипта bash до и после частей, которые вы хотите время. Основная программа может затем измерить время между сигналами запуска и останова, что, по крайней мере, даст вам время на настенных часах (но не фактическое время процессора). В противном случае, я не уверен, что есть способ точно измерить время процессора только для части скрипта без использования модифицированного bash (которого я бы по возможности избегал).