小编Wil*_*ell的帖子

我怎么能确定在使用pause()时我没有丢失信号?

我正在编写一个程序,它使用fork来创建子进程,并在完成后对它们进行计数.我怎么能确定我没有丢失信号?如果孩子在主程序仍然处理前一个信号时发送信号,会发生什么?是"丢失"的信号?我怎么能避免这种情况?

void my_prog()
{
    for(i = 0; i<numberOfDirectChildrenGlobal; ++i) {    
        pid = fork();
        if(pid > 0)//parent
            //do parent thing
        else if(0 == pid) //child
            //do child thing
        else
            //exit with error
    }

    while(numberOfDirectChildrenGlobal > 0) {
        pause(); //waiting for signal as many times as number of direct children
    }

    kill(getppid(),SIGUSR1);
    exit(0);
}

void sigUsrHandler(int signum)
{
    //re-register to SIGUSR1
    signal(SIGUSR1, sigUsrHandler);
    //update number of children that finished
    --numberOfDirectChildrenGlobal;
}
Run Code Online (Sandbox Code Playgroud)

c linux signals

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

AWK通过传递变量替换特定行的模式

我试图将两个变量传递给awk,以便在特定行(-v var2)中用空格("")替换一个单词(-v var1 ).当我运行它时,在我想要的线路上没有任何东西被替换.

我的第一个做法是:

palabra=betina; i=5 ; awk -v var1="$i" -v var2="$palabra" 'NR==var1 {sub("var2"," ")}{print }' Countries > tmp
Run Code Online (Sandbox Code Playgroud)

"国家"文件中,内容为:

usa
usa
colombia
spain
betina
Run Code Online (Sandbox Code Playgroud)

variables awk line

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

如何验证十进制数?

嗨,我正在完成一项任务并陷入这一部分,如何在shell中验证十进制数/数字?

它可以接受数字而不是十进制数字.我希望它能够接受两者.

这就是我到目前为止所拥有的

if echo $value | egrep '^[0-9]+$' >/dev/null 2>&1 ; then
echo "OK"
else
echo "There Is An Error"
echo "Please Try Again"
fi
Run Code Online (Sandbox Code Playgroud)

bash shell

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

使用套接字在nat后面连接一个IP

考虑一部电话,它与电话A连接到wifi,地址为Dynamic Ip,ex:192.168.0.34并通过服务器套接字在上侦听,port 7567,如果我有另一部电话B连接公用电话,则可以使用任何编程语言连接该套接字。 IP说10.0.0.56,我有WiFi路由器IP说前55.56.89.76

networking network-programming

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

从文件开头删除字节数

我想复制一个没有前256个字节的文件.

在python中有一个很好的方法吗?

我猜测,简单的方法是用计数器读取字节字节,然后只有当它达到256时才开始复制.

我希望有更优雅的方式.

谢谢.

python file

3
推荐指数
3
解决办法
7581
查看次数

bash中的进程组

在下面的会话中,bash启动两个不同的管道,但它们共享相同的pgid.当ls管道被删除(所以不同的管道没有在子shell调用),两个管道得到不同的处理组.是什么赋予了?特别是,非交互式shell将不同的管道放在同一个进程组中是否正确?还是我误解了什么?

bash-3.2$ cat print-pgid 
#!/bin/sh
echo $$ starting in $(ps -o pgid= $$) >&2
bash-3.2$ ls | for i in a b; do ./print-pgid | ./print-pgid & done
bash-3.2$ 67396 starting in 67393
67395 starting in 67393
67397 starting in 67393
67398 starting in 67393

bash-3.2$ for i in a b; do ./print-pgid | ./print-pgid & done
[1] 67404
[2] 67406
bash-3.2$ 67404 starting in 67403
67403 starting in 67403
67405 starting in 67405
67406 starting in 67405 …
Run Code Online (Sandbox Code Playgroud)

bash shell

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

我想与 shell 脚本进行简单的子字符串匹配

我想知道如何在 shell 脚本中进行纯子字符串匹配。

例如,如果我有

STRING1="http://127.0.0.1/"
STRING2="http://127101011/"
SUBSTRING="127.0.0.1"
Run Code Online (Sandbox Code Playgroud)

我希望 SUBSTRING 匹配 STRING1 但不匹配 STRING2。就像java.lang.String.indexOf(String)。

我想这个问题也可以通过正确转义 SUBSTRING 的内容来解决,但我似乎不知道如何解决。

谢谢你,wb康

shell

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

bash如果是空字符串

当您通过终端安装或更新时,有些人可能已经发现在Ubuntu中

你得到一个类似的问题

"你有没有安装或删除包[Y/n]?"

当你按下输入时就像输入"Y"或"y"时一样

所以我想知道如何在bash中实现这一点这是我到目前为止所拥有的?

echo "question?[Y/n]"
read choose
if [ $choose ~= "Y" ] [ $choose ~= "y" ] [ $choose ~= "" ]
then 
#code
fi
Run Code Online (Sandbox Code Playgroud)

bash if-statement

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

检查bash中是否至少存在一个文件

我有这个

if [[ -e file.jpg ]] ;then echo "aaaaaaaaa"; fi
Run Code Online (Sandbox Code Playgroud)

并打印出"aaaaaaa"

但是如果还有file.png或file.png我想要打印

所以我需要这样的东西

if [[ -e file.* ]] ;then echo "aaaaaaaaa"; fi
Run Code Online (Sandbox Code Playgroud)

但它不起作用我在语法中遗漏了一些东西

谢谢

bash shell scripting

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

如何在GCC中发生无效指针算术运算

int main()  
{  
    int a;  
    void *p;  
    p = &a;  
    printf("%ld\n",(long)p);  
    p = p+1;  
    printf("%ld\n",(long)p);  
}  
Run Code Online (Sandbox Code Playgroud)

在这个程序中,p+1只是将p的值递增1.我知道void pointer arithmetic是不可能的C,所以GCC隐式地这样做.如果是的话,那就是它char pointer.另外,dereferencing如果void指针隐式执行指针运算,为什么不可能使用void指针.

c gcc pointers void-pointers pointer-arithmetic

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