小编Rob*_*y75的帖子

ssh在bash中突然出现while循环

我使用这个bash-code将文件上传到远程服务器,对于普通文件这很好用:

for i in `find devel/ -newer $UPLOAD_FILE`
do
    echo "Upload:" $i
    if [ -d $i ]
    then
        echo "Creating directory" $i
        ssh $USER@$SERVER "cd ${REMOTE_PATH}; mkdir -p $i"
        continue
    fi
    if scp -Cp $i $USER@$SERVER:$REMOTE_PATH/$i
    then
        echo "$i OK"
    else
        echo "$i NOK"
        rm ${UPLOAD_FILE}_tmp
    fi
done
Run Code Online (Sandbox Code Playgroud)

唯一的问题是,对于名称中有空格的文件,for循环失败,所以我替换了第一行,如下所示:

find devel/ -newer $UPLOAD_FILE | while read i
do
    echo "Upload:" $i
    if [ -d $i ]
    then
        echo "Creating directory" $i
        ssh $USER@$SERVER "cd ${REMOTE_PATH}; mkdir -p $i"
        continue
    fi …
Run Code Online (Sandbox Code Playgroud)

ssh bash

85
推荐指数
2
解决办法
4万
查看次数

shebang:使用相对于脚本路径的解释器

我尝试构建可以随处运行的脚本.为此我使用了一个定制的python,它总是在相对于脚本的父目录中.

通过这种方式,我可以将我的软件包加载到USB记忆棒上,无论硬盘安装在何处以及是否安装了python,它都可以在任何地方使用.

但是,当我使用时

#!../python
Run Code Online (Sandbox Code Playgroud)

然后它只在从其目录调用脚本时才起作用,这当然是不可接受的.

有没有办法做到这一点,还是在当前的shebang机制中这是不可能的?

python shebang

22
推荐指数
2
解决办法
6945
查看次数

为什么我必须为子进程`wait()`?

即使等待1的linux手册页很好地解释了你需要wait()为他们的子进程不要变成僵尸,它根本不说明原因.

我计划了我的程序(这是我的第一个多线程程序,所以请原谅我的天真)围绕一个for(;;)永远的循环启动子进程,它们被exec()废弃并且肯定会自行终止.

我无法使用,wait(NULL)因为这使得并行计算变得不可能,因此我可能不得不添加一个存储子pids的进程表,并且必须使用waitpid- 不是无聊的,但经过一段时间后 - 这是一个问题,因为运行时间孩子们从几微秒到几分钟不等.如果我使用waitpid得太早,我的父进程将被阻止,当我太晚使用它时,我会被僵尸淹没,不能fork()再这样了,这不仅对我的进程有害,而且会导致整个系统出现意外问题.

我可能不得不编写一些使用一些最大数量的子节点的逻辑,并在达到该数量时阻止父节点 - 但这不应该是必要的,因为大多数子节点很快终止.我能想到的另一个解决方案(创建一个双层父进程,产生并发子进程,而这些进程同时产生和wait为孙子进行生成)对我来说太复杂了.可能我还可以找到一个非阻塞功能来检查孩子,并且waitpid只有当他们终止时才使用.

不过问题是:

为什么Linux会保留僵尸?为什么我要等我的孩子?这是否对父进程强制执行纪律?在使用Linux的几十年中,我从来没有从僵尸进程中获得任何有用的东西,我不太了解僵尸作为"特征"的用处.

如果答案是父进程需要有办法找出他们的孩子发生了什么,那么为了上帝的缘故,没有理由把僵尸算作正常的进程并且禁止创建非僵尸进程只是因为有太多僵尸.在我正在开发的系统上,我只能生成400到500个进程才能停止一切(这是一个维护得很差的CentOS系统,运行在我能找到的最便宜的VServer上 - 但仍然有400个僵尸不到几KB的信息)

linux fork

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

Mysql中的低优先级查询

是否可以为MySQL中的查询分配较低的优先级,类似于nice命令行上的命令(在Linux中)?如果没有,是否有可以做类似的数据库?

mysql

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

对 git 最友好的文档格式是什么?

我们将 .docx 和 .odt 用于我们的“以人为本”的文档,但这些格式对于 git 存储库来说几乎是最糟糕的。

是否有一些 git 友好的格式提供基本的文字处理器功能并将所有内容都包含在一个文件中?

git

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

C流:直接将数据从一个流复制到另一个流,而不使用缓冲区

我想将数据从一个流复制到另一个流.现在通常,我会这样做:

n = fread(buffer, 1, bufsize, fin);
fwrite(buffer, 1, n, fout);
Run Code Online (Sandbox Code Playgroud)

有没有直接将数据从写一个办法finfout,没有经过缓冲准备,即代替fin->buffer->fout,我想直接做fin->fout(无缓冲).

是否可以在ANSI C中这样做?如果没有,是否可以使用POSIX功能?或者特定于Linux的解决方案?

c linux posix stream

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

是否可以在 C 程序中硬编码共享库位置?

通常,程序(在 Linux 中)使用 LD_LIBRARY_PATH 来定位它们的共享库,但我想使用自定义路径,而不永久更改 LD_LIBRARY_PATH。

基本上,bash-wrapper 可以轻松实现:

#!/bin/sh
export LD_LIBRARY_PATH=/my_lib_path/
/my_bin_path/myprogram $*
Run Code Online (Sandbox Code Playgroud)

(Bash 仅在此脚本中更改 LD_LIBRARY_PATH 而不是永久更改)

我想知道是否有可能没有丑陋的 bash-hack 的情况下在单个可执行文件中用纯 C 做同样的事情。所有路径和库的确切名称在编译时都是已知的。

c shared-libraries

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

C/C++中gettext国际化系统的性能开销

我刚刚完成了http://www.gnu.org/software/gettext/manual/gettext.html的文档,并且根本没有关于性能开销的讨论.在互联网上,我发现只有其他语言(PHP和Java)的性能讨论,但没有C/C++的性能讨论.

因此我的问题:

  1. 启动使用gettext的程序时的性能开销是什么(加载共享库?如何将翻译加载到内存中?是在启动时还是按需加载所有翻译?)

  2. 在程序的正常运行期间,性能损失是多少?(即需要翻译时)程序内存占用量增加多少以及内存如何组织?当程序空闲时,程序的某些部分是否有更高的危险/可能性?(如果翻译存储在内存的一个非常不同的部分而不是程序的其余部分,那么根据我的理解,页面错误的可能性高于程序的非国际化版本)

  3. 在"C"-locale下运行的程序是否也会遭受这些性能损失?

非常感谢.

c c++ performance overhead gettext

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

从管道作为标准输入读取时出现“错误的文件描述符”错误

我分叉并设置了这样的命令:

pid_t pid;
pid = fork();
if (pid == 0)
{   // I am the child
    freopen("/input_pipe","r",stdin);
    freopen("/output_pip","w",stdout);
    execl("/bin/sh", "sh", "-c", command, (char *)NULL); // using execv is probably faster
    // Should never get here
    perror("execl");
    exit(1);
}
Run Code Online (Sandbox Code Playgroud)

/input_pipe 在进程分叉之前已经创建并填充了数据。

这在几乎所有情况下都非常有效。该命令read()从其标准输入读取(使用)并获取由另一个进程写入管道的数据。

但有时该命令无法从其 stdin 流中读取,并在尝试这样做时收到“错误的文件描述符”错误。

什么可能导致此错误?

编辑:我已将 freopen 部分更改为:

    pipe_in = open(pipename_in, O_RDONLY);
    pipe_out = open(pipename_out, O_WRONLY);

    dup2(pipe_in, 0);
    dup2(pipe_out, 1);
Run Code Online (Sandbox Code Playgroud)

我将对此进行几天的测试,因为错误很少出现。

c pipe

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

"git gc"也运行"git repack"吗?

我已经关闭了git令人讨厌的自动重新打包功能(我猜大多数git用户在使用git时都知道"重新打包以获得最佳性能"消息)而是在一夜之间用cronjob调用"git gc".

但是我不确定这是否足够,我是否也应该在"git gc"之前或之后运行"git repack".

"git repack"和"git gc"的联机帮助页没有提到两者之间的任何联系,"git repack"的联机帮助页实际上包含这个短语:

相反,松散的不可到达对象将根据正常的到期规则与下一个git gc调用进行修剪.

这将向我表明"git gc"不足以完成所有的管家任务,并且还需要"git repack".这是正确的,什么管家命令应该用于git?

git garbage-collection

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