小编xia*_*iaq的帖子

在shell脚本中实现无限等待

这可能听起来微不足道,但我很确定这个问题没有被问过,或者至少我找不到它.

我正在寻找一种方法来构建一个无限等待(不一定是一个循环)与shell脚本,以便它永远等待,并可以被杀死(或技术上,接收一个SIGTERM).以下是已知的可能的构造和反对它们的参数:

  1. while true; do sleep 1; done这几乎得到它,但由于sleep是一个外部命令,当我发送SIGTERM到正在运行的脚本时,它必须等待sleep先完成然后处理信号.换成sleep 1类似的东西sleep 10,滞后很明显.该解决方案每1秒唤醒一次CPU,这并不理想.
  2. while true; do read; donestdintty 时这是完美的.read是一个内置的shell,SIGTERM立即到达脚本.但是,当stdin/dev/null时,脚本吃掉的无奈运行所有的CPU read永远都在/dev/null.

因此,需要一个永远等待的shell内置构造.通过略读man dash我没有找到这样的一个-唯一的阻挡内建有readwait,和我没有想法,我怎么可以构建采用理想的一个wait.

答案应该适用于POSIX shell(有效dash),或者不太适合Bash.

补充说明.

第一个例子不能完美运行的情况比我想象的要复杂得多.使用以下shell脚本:

#!/bin/sh
echo $$
while true; do
    sleep 100
done
Run Code Online (Sandbox Code Playgroud)

如果你在另一个tty杀死它,它会立即终止.当你试图捕捉时,有趣的事情就开始了.使用此脚本:

#!/bin/sh
at_term() {
    echo 'Terminated.' …
Run Code Online (Sandbox Code Playgroud)

unix shell

22
推荐指数
3
解决办法
1万
查看次数

Linux中的Clang块?

Clang有一个非常酷的扩展名为block,它将真正的lambda函数机制引入C语言.与block相比,gcc的嵌套函数非常有限.但是,尝试编译一个简单的程序c.c:

#include <stdio.h>

int main() {
    void (^hello)(void) = ^(void) {
        printf("Hello, block!\n");
    };
    hello();
    return 0;
}

clang -fblocks c.c,我得到了

/usr/bin/ld.gold: /tmp/cc-NZ7tqa.o: in function __block_literal_global:c.c(.rodata+0x10): error: undefined reference to '_NSConcreteGlobalBlock'
clang: error: linker command failed with exit code 1 (use -v to see invocation)

似乎我应该使用clang -fblocks c.c -lBlocksRuntime,但后来我得到了

/usr/bin/ld.gold: error: cannot find -lBlocksRuntime
(the rest is the same as above)

任何提示?

c linux block clang

9
推荐指数
1
解决办法
5101
查看次数

C++的新运算符是可重入的(或异步安全的)吗?

背景是我的这个问题.简而言之,我必须 fork使用多线程C++程序,所以我想知道在仅限于可重入函数时我能做多少,而最重要的事情之一就是动态内存.

因此,malloc称为是无折返.但是C++ new呢?我搜索了相关结果并不多(主要是由于难以找到正确的"新"),但至少有一个声明new 可重入的.关于整个C++标准库还有一个相关的问题没有令人满意的答案.

编辑:我想标准没有说明这一点,所以我最关心的是主要的实现.

c++ reentrancy

8
推荐指数
1
解决办法
766
查看次数

将浮点数转换为有理数,保证转换回原始浮点数

我正在寻找一种将浮点数转换为有理数的算法,以便保证有理数计算回原始浮点数,并且分母被最小化。

一个简单的算法只能将浮点数的实际值返回为 X / 2 N,但对于不是有限二进制分数的任何东西,2 N往往非常大。例如,数字 0.1,当存储在双精度浮点数中时,实际上近似为 ³??²???????¹???³????????????????? ???(分母为 2 55)。但是,将 0.1 转换为 ¹??? 显然更好,而且¹???将评估为 ³??²?????¹???³?????????????????????? 在浮点运算下。

一个相关的问题是用最少的数字打印十进制浮点数(本文描述了一些技术),这可以被认为是这个问题的一个特殊版本,附加约束是分母必须是 10 的幂。

一个现有的问题,并且可能更多,但它们没有转换后的有理数必须评估为原始浮点数的约束。

floating-point rational-number numerical-analysis fractions

1
推荐指数
1
解决办法
141
查看次数