Articles of unix

使用fork()在C(不是C ++)中创build3个孩子

嗨,我一直在制定一项计划,让孩子们分叉,然后再从每个孩子那里分娩更多的孩子,但这不是我需要帮助的。 当我运行我的程序(在这里它是一个function,但工作原理是一样的)我应该有一个父母(PPID)产卵3个孩子(PIDS = 1,2,3),但我得到的是相同的PID和PPID 3次(我现在的代码),或者在我得到3个父母之前,每个父母都有一个孩子,PPIDS与PIDS不同,但PPID与以前的孩子PID一样。 在我最近的尝试中,从不在父子(父亲)的信息上方显示孩子(儿子)。 它应该看起来像这样 [dad] hi am I PID 1234 and I come from ####(dont care what this number is) [son] hi i am PID 1111 and I come from PPID 1234 [son] hi i am PID 1112 and I come from PPID 1234 [son] hi i am PID 1113 and I […]

shell如何处理无限循环

无论何时我需要限制shell命令输出,我使用较less的分页结果: cat file_with_long_content | less 这工作得很好,但是我很好奇,即使输出永远不会结束,仍然可以工作,请考虑在inf.sh文件中使用以下脚本: while true; do date; done 然后我跑 sh inf.sh | less 而且它仍然可以对结果进行重新分页,所以说pipe道输出结果而不是等待命令完成才能输出结果是正确的吗?

如何杀死一个PID不断变化的进程?

我知道我可以使用这个技巧if (fork()) exit(0); 改变当前进程的PID。 所以,下面的程序会有一个很快改变的pid。 如何杀死这样的进程? 有没有比执行大量killall procname更好的方法,直到能够在fork之前运行kill() ? 我知道这不是一个“进程”,但是每个进程只运行几微秒。 #include <unistd.h> #include <stdlib.h> #include <stdio.h> int main() { pid_t self = getpid(); while (1) { if (fork()) exit(0); if (self + 10000 < getpid()) break; // Just to kill it after some time usleep(1000); } return 0; } 我发现列出进程的唯一方法是执行ps -A | grep procname ps […]

什么是一个好的Linux退出错误代码策略?

我有几个独立的可执行Perl,PHP CLI脚本和C ++程序,我需要开发一个退出错误代码策略。 这些程序由其他程序使用我创build的用于在PHP中使用exec()的封装类来调用。 所以,我将能够得到一个错误代码。 基于那个错误代码,调用脚本将需要做一些事情。 我已经做了一些研究,看起来1-254(或者只是1-127)范围内的任何事情对于用户定义的错误代码来说都是公平的游戏。 我只是想知道在这种情况下其他人是如何处理error handling的。

需要Linux cmd-line应用程序来比较二进制文件,并在第一次不匹配时退出

是否有一个Linux命令行应用程序将比较两个二进制文件,并退出第一次失误? cmp似乎没有退出的select。

对cron执行的命令是否有特殊限制?

我有一个crontab ,看起来像 0 0 * * * pg_dump DB_NAME > /path/to/dumps/`date +%Y%m%d`.dmp 当我手动运行它工作正常,但不是当cron运行它。 挖完日志后,我明白了 Dec 12 00:00:01 localhost crond[17638]: (postgres) CMD (pg_dump DB_NAME > /path/to/dumps/`date +) 它看起来像百分号的问题,但man页甚至没有包含百分比字符,所以我认为他们是没问题的。

setjmp和longjmp – 用例子理解

我知道setjmp和longjmp的定义。 setjmp将环境存储在堆栈上下文中,另一个恢复。 但是我觉得我有一些地方有些缺乏理解。 有人可以解释我吗,借助一些很好的例子,我该如何保证,如何保存以及如何恢复? 我看到jmp_buf中有很多CPU寄存器。 但是,我如何确保恢复? 请帮助我用简洁的例子来解释。 我search了一下,并提到了堆栈溢出的其他问题,但都没有给出明确的例子。 巨大的巨大感谢提前。 PS:它应该只来自Linux / Unix环境。

如何删除与模式匹配的行和使用sed后面的行?

我有一个如下所示的文件: good text good text FLAG bad text bad text good text good text good test bad Text FLAG bad text bad text good text 我需要删除任何包含“FLAG”的行, 而且我总是需要在“FLAG”行之后立即删除这一行。 “旗”线来不规则,我不能依赖任何行号策略。 任何人都知道如何用sed做到这一点?

在unix / linux命令行(例如BASH)中定义函数

有时候,我有一个单独的内容,我为了一个特定的任务重复了很多次,但是可能永远不会以完全相同的forms再次使用。 它包含一个我从目录列表中粘贴的文件名。 之间的某处并创build一个bash脚本我想也许我可以在命令行创build一个单线程函数,如: numresults(){ ls "$1"/RealignerTargetCreator | wc -l } 我已经尝试了一些使用eval的方法,使用了numresults=function… ,但还没有find正确的语法,到目前为止还没有发现任何东西。 (所有的东西都是关于bash函数的教程)。

在某种模式之前添加文本时使用sed和忽略大小写

sed -i '/first/i This line to be added' 在这种情况下,如何在searchpattern = first的时候忽略case