Я хочу выполнить ориентированную на многопотоковое исполнение часть сценария в Ruby, который называет внешнюю программу, затем проверяет статус выхода той внешней программы. Что лучший способ состоит в том, чтобы сделать это? До сих пор я проверял $?
, но я думаю, что получаю состояние состязания с другими частями программы.
Вот некоторый пример кода:
Thread.new do
`external_program`
if $?.exitstatus == 0
# it worked.
else
# it didn't work.
end
end
Идеально, я сделал бы что-то как
Process.new(`external_program`).exitstatus
так, чтобы exitstatus
был неразрывно связан с тем процессом, а не последним, который, оказалось, завершался. Там какой-либо путь состоит в том, чтобы сделать это?
Если вы сделали это на основе size :
Thoughts?
-aj
-121--2835541-http://gcc.gnu.org/wiki/Visibility
Это полное руководство по экспорту в msvc и gcc.
-121--1238896- Хотя rb_last_status (он же $?
) является глобальной переменной, Руби делает магический трюк, чтобы сделать его для каждого потока: В rb _ thread _ save _ context
он сохраняет rb _ last _ status
в структуре старого потока; rb _ thread _ restore _ context
устанавливает rb _ last _ status
из сохраненного значения. Если у вас есть гонка с участием $?
, это ошибка Руби.