小编mus*_*hil的帖子

`git stash show -p stash @ {N}`和`git show stash @ {N}`之间的区别?

我认为他们应该基本相同,但是当我尝试时

$ git stash show -p stash@{N}
Run Code Online (Sandbox Code Playgroud)

$ git show stash@{N}
Run Code Online (Sandbox Code Playgroud)

后者显示了一些额外的提交信息,但实际的差异要短得多.(前者显示了大约十二个文件,但后者只有一个.)

那么,两者之间究竟有什么区别,为什么它们不同?

我还可以依赖于git diff stash@{M} stash@{N}正确的事情吗?

git git-stash git-show

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

GDB:在多次 fork() 之后调试子进程

我正在调试一个程序,该程序重复fork()使用子进程执行某些委托任务的典型过程,因为父进程调用waitpid()等待子进程完成,然后继续。例如:

\n\n
while (!finished) {\n    pid_t p = fork();\n    if (p < 0) {\n        perror("fork");\n        exit(EXIT_FAILURE);\n    }\n    else if (p == 0) {\n        /* Do something. For example: */\n        if (/* some (rare) condition */) \n            raise(SIGSEGV);\n        exit(EXIT_SUCCESS);\n    }\n    else {\n        int status;\n        pid_t w = waitpid(p, &status, 0);\n        if (w < 0) {\n            perror("waitpid");\n            exit(EXIT_FAILURE);\n        }\n        /* Do something. */\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我想在 GDB 中运行该程序并调试接收信号的子进程,无论有多少其他子进程在它之前成功完成并消失

\n\n

当然,我需要set follow-fork-mode child,因为否则 GDB …

gdb fork process

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

bash:如何确保与 exec 一起使用的进程替换终止?

如果我跑

$#/bin/bash
for i in `seq 5`; do
    exec 3> >(sed -e "s/^/$i: /"; echo "$i-")
    echo foo >&3
    echo bar >&3
    exec 3>&-
done
Run Code Online (Sandbox Code Playgroud)

那么结果是不同步的;它可能是这样的:

1: foo
1: bar
2: foo
2: bar
1-
3: foo
3: bar
2-
3-
4: foo
5: foo
4: bar
5: bar
4-
5-
Run Code Online (Sandbox Code Playgroud)

>(...)在进行下一次迭代之前,如何确保流程替换已完成?

sleep 0.1exec 3>&-帮助之后插入,但它不优雅,效率低下,并且不能保证总是有效。

编辑:这个例子可能看起来很傻,但它只是为了说明。我正在做的是在循环中读取输入流,将每一行提供给一个在循环中偶尔会改变的进程。在代码中更容易解释:

# again, simplified for illustration
while IFS= read line; do
    case $line in
    @*)
        exec 3>&-
        filename=${line:1}
        echo "starting $filename" …
Run Code Online (Sandbox Code Playgroud)

bash process-substitution

5
推荐指数
2
解决办法
1814
查看次数

使用转换后的键的类似字典的类

我想要一个类似字典的类,它在查找时透明地使用转换后的键,以便我可以编写

k in d          # instead of f(k) in d
d[k]            # instead of d[f(k)]
d.get(k, v)     # instead of d.get(f(k), v)
Run Code Online (Sandbox Code Playgroud)

等等(例如,想象一下f进行某种规范化,例如f(k)返回k.lower()。)

似乎我可以继承dict并覆盖各个操作,但并不是有一个集中位置来进行所有键都经过的这种转换。这意味着我必须覆盖所有__contains____getitem__get和可能的__missing__等。这变得太乏味且容易出错,并且不是很有吸引力,除非这种开销超过手动替换f(k)普通 上的每个调用的开销dict

python dictionary

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