Если большая часть времени тратится на вычисления с CPU (другими словами, если 10 секунд в ./startmerge
не расходуются на IO), то вы хотите, чтобы ограничить процессорное время, поэтому используйте setrlimit(2) системный вызов с RLIMIT_CPU
. В Баш, вы хотите использовать его ulimit
встроенную команду (вызов setrlimit
системного вызова), см this answer, как
ulimit -t 10
перед запуском startmerge
.
Если ваш startmerge
не ресурсоемкие, вы хотите kill
его через 10 секунд, возможно (см this)
startmerge & ; pidof_startmerge=$!
sleep 10; kill $pidof_startmerge
еще лучше, сделать что цикл (например, петля в десять раз вокруг sleep 1
)
Если у вас есть доступ к исходному коду C startmerge
и вы хотите его исправить, прочитайте сначала time(7) и signal(7). Поскольку Duck прокомментировал, рассмотрите alarm(2) или setitimer(2) или timer_create(2) и настройте обработчик сигналов -e.g. для SIGALRM
с sigaction(2) (но не забывайте, что обработчики сигналов ограничены только функциями async-signal-safe, вы можете установить в них переменную volatile sig_atomic_t
и проверить эту переменную за пределами). Если у вашего startmerge
есть event loop на основе некоторого мультиплексирования, например, poll(2) (или старого select(2)
), он должен быть даже проще, а конкретный Linux timerfd_create(2) может быть очень полезен.
Вы можете поймать ловушку SIGALRM
в bash, см. this.
Advanced Linux Programming имеет несколько глав, связанных с вашим вопросом. Advanced Bash Programming Guide также полезен для чтения.
Общим методом является использование таймера сторожевой собаки, работающего как другой процесс. Когда начнется ваш скрипт, сохраните созданный PID - тогда ваша собака следит за этим, посылая сигнал уничтожения, если это необходимо. –
Что вы хотите, если он не закончил то, что он должен делать в течение 10 секунд? – Bandrami
'alarm (10)' довольно просто, хотя, возможно, это не так, как вы действительно хотите. Обратите внимание, что вам нужно будет написать для него небольшой обработчик сигналов, потому что назначение по умолчанию заключается в завершении процесса. – Duck