Boost постоянно не загружается при использовании cmake для ethminer

Копаясь в исходном коде bash, я смог выяснить, что bash на самом деле будет игнорировать разветвления, если нет каналов или перенаправлений. Из строки 1601 в выполнить _cmd.c:

  /* If this is a simple command, tell execute_disk_command that it
     might be able to get away without forking and simply exec.
     This means things like ( sleep 10 ) will only cause one fork.
     If we're timing the command or inverting its return value, however,
     we cannot do this optimization. */
  if ((user_subshell || user_coproc) && (tcom->type == cm_simple || tcom->type == cm_subshell) &&
      ((tcom->flags & CMD_TIME_PIPELINE) == 0) &&
      ((tcom->flags & CMD_INVERT_RETURN) == 0))
    {
      tcom->flags |= CMD_NO_FORK;
      if (tcom->type == cm_simple)
    tcom->value.Simple->flags |= CMD_NO_FORK;
    }

Позже эти флаги переходят к execute_disk_command()функции, которая устанавливает целочисленную переменную nofork , которая затем проверяется перед попыткой разветвления .Сама фактическая команда будет запускаться execve()оболочкой функциональной оболочкой _execve()из разветвленного или родительского процесса, и в этом случае это фактический родитель.

Причина такой механики хорошо объяснена в ответе Стефана .


Дополнительное примечание, выходящее за рамки этого вопроса :, следует отметить, что, по-видимому, имеет значение, является ли оболочка интерактивной или работает через -c. Перед выполнением команды будет форк. Это видно из запуска straceв интерактивной оболочке(strace -e trace=process -f -o test.trace bash)и проверки выходного файла :

.

19607 clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_t
idptr=0x7f2d35e93a10) = 19628
19607 wait4(-1,  
19628 execve("/bin/true", ["/bin/true"], [/* 47 vars */]) = 0

См. также Почему bash не создает подоболочку для простых команд?

0
05.06.2021, 15:04
1 ответ

Boost переместил загрузку в JFrog Artifactory

Для пользователей Boost единственное отличие состоит в том, что появился новый URL-адрес для загрузки выпусков и моментальных снимков.

Вместо:https://dl.bintray.com/boostorg/release/вы должны использоватьhttps://boostorg.jfrog.io/artifactory/main/release/для получения ускоренных выпусков.

Якобы -это исправит:

https://github.com/ethereum-mining/ethminer/commit/47348022be371df97ed1d8535bcb3969a085f60a

cmake/Hunter/config.cmake
@@ -1,2 +1,7 @@
  hunter_config(CURL VERSION ${HUNTER_CURL_VERSION} CMAKE_ARGS HTTP_ONLY=ON CMAKE_USE_OPENSSL=OFF CMAKE_USE_LIBSSH2=OFF CURL_CA_PATH=none)
- hunter_config(Boost VERSION 1.66.0)
+ hunter_config(
+     Boost
+     VERSION 1.66.0_new_url
+     SHA1 f0b20d2d9f64041e8e7450600de0267244649766
+     URL https://boostorg.jfrog.io/artifactory/main/release/1.66.0/source/boost_1_66_0.tar.gz
+ )
2
20.09.2021, 15:44

Теги

Похожие вопросы