Articles of unix

一个过程组必须有一个正在运行的领导过程?

在类Unix操作系统中,如果一个进程的pid和它的pgid是相等的,那么这个进程是一个进程组的领导者。 但是,如果stream程负责人已经退出,并且同一组中的其他stream程仍在运行,那么成功的领导者stream程是谁?

将subprocess的stdin和stdoutredirect到pipe道

编辑:解决scheme是 int c1=dup2(pipes[0][1],STDOUT_FILENO); int c2=dup2(pipes[1][0],STDIN_FILENO); setvbuf(stdout,NULL,_IONBF,0); SETVBUF将stdout设置为非缓冲。 即使我正在打印换行符,如果目标不是一个实际的屏幕,我想,它变得缓冲。 编辑:当我把fflush(标准输出)后LINE 1和fflush(fout) LINE 4后,它按预期工作。 但是,如果没有第一行之后的fflush(stdout) ,它就不能工作。问题是我不能将fflush放到我计划运行的程序中。 我正在尝试从我的过程开始另一个程序。 我没有访问它的代码,但我知道它使用标准input和标准输出用户交互。 我试图通过创build2个pipe道来启动该程序,将subprocess的stdin / stdout分叉并redirect到适当的pipe道末端。 要点是,父应该能够通过文件描述符与孩子通信,而其标准input/标准输出应该是完整的。 POPEN系统调用只打开单向pipe道。 下面的代码几乎可以工作。 有4行标记为LINE 1..4。 LINE 1是发送到pipe道的subprocess,LINE 2是从pipe道接收的subprocess,LINE 3是向pipe道发送的父进程,LINE 4是从pipe道接收的父进程, 这只是一个玩具的例子,以确保事情的工作。 问题是,所有4行LINE1..4都是未注释的输出,我看到在terminal上 PARENT1: -1 FD: 1 0 4 5 0 1 DEBUG1: 0 DEBUG2: 0 而如果LINE 1和LINE 3没有注释,我只能看到连续的数据stream。 如果只有LINE 2和LINE 4未注释,则会发生同样的情况。 但是,我想要一个完整的双向通信。 同时添加注释的SLEEP不会改变行为。 这里可能是什么问题。 我想知道为什么没有双向POPEN。 int […]

UNIX读取行为

我写了这个小代码来确定读取行为。 #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <limits.h> #include <errno.h> int main () { ssize_t ret; int fd; char str[30] = {0}; off_t lret fd = open("./sample", O_RDWR); printf("File descriptor = %d\n",fd); lret = lseek(fd,LONG_MAX,SEEK_SET); printf("%ld\n",lseek(fd, 0, SEEK_CUR)); ret = read(fd, str, 20); if (ret == -1) { perror("read error"); } else […]

Linux:更改文件所有权而不复制?

我有一个REST服务器,其目的是组织各个用户生成的文件。 为了简单起见,服务器和用户都可以访问共享networking文件系统。 工作stream程如下:用户在临时文件夹中生成文件。 然后,他通知服务器将文件放在自己的位置,并将一些元数据存储在数据库中。 服务器应该拥有这些文件,并根据需要照顾他们的删除。 我的问题是:因为文件可能相当大,我想避免昂贵的副本,而只是将文件从临时文件夹移动到他们的最终目的地。 但是,移动文件会阻止服务器更改其所有权( 例如,请参阅此处 )。 有没有办法解决这个问题,没有1)复制文件,2)作为root运行服务器? 编辑:一对夫妇精度: 要移动的文件可以是具有文件层次结构的目录 让服务器拥有最终位置中的文件来限制对其他用户的访问会很好。

perl库path

我需要检索perl库统计信息和分布所在的path。 该path是运行该脚本所必需的。 我在一个计算机集群上。 谁能帮我? 谢谢

用基于匹配组的评估stringreplacestring(优雅的方式,而不是用于…)

我正在寻找一种方法来replace正则expression式匹配的文件的string与另一个string,这些string将从匹配的string中生成/评估。 例如,我想要replace此文件中的时间戳(时间戳+持续时间) 1357222500 3600 … Maybe intermediate strings… 1357226100 3600 … Maybe intermediate strings… … 由人类可读的date表示(date范围)。 到目前为止,我总是使用像Bash这样的shell脚本遍历每行,匹配X行,得到匹配的组string,并在处理后打印行,例如这样(从内存中): IFS=" " for L in `cat file.txt`; do if [[ "${L}" =~ ^([0-9]{1,10})\ ([0-9]{1,4})\ .*$ ]]; then # Written as three lines for better readability/recognition echo -n "`date –date=@${BASH_REMATCH[1]}` – " echo -n "`date –date=@$(( ${BASH_REMATCH[1]} + ${BASH_REMATCH[2]} […]

如何在这个目录中的每个文件中用“goodbye”replace单词“hello”,并且recursion地?

假设我在这个目录中有很多文件。 我想用“再见”来代替“你好”,也是recursion的

基于文件系统中的位置的Shell提示符

我必须在根文件系统下的三个主目录下工作 – home / username,project和scratch。 我想我的shell提示符显示我在哪些顶级目录。 这是我正在做的事情: top_level_dir () { if [[ "${PWD}" == *home* ]] then echo "home"; elif [[ "${PWD}" == *scratch* ]] then echo "scratch"; elif [[ "${PWD}" == *project* ]] then echo "project"; fi } 然后,我将PS1导出为: export PS1='$(top_level_dir) : ' 不幸的是,这不是我想要的。 我home :为我的提示,当我在我的家目录,但如果我切换到草稿或项目,然后提示不会改变。 我不明白bash脚本很好,所以我将不胜感激任何帮助来纠正我的代码。

有没有办法看到一个path的所有中间目录的权限..?

我有一个文件path..是否有任何单一的命令来查看path中的所有中间目录的文件/目录权限..?

使用单行命令删除目录

如何使用单个命令删除多个目录? 是否可以在一个class轮中完成? 如果是,请帮助。 /osmf/mgmt/scheduler>ls -lrt total 22 drwx—— 2 root root 12288 Mar 26 2009 lost+found drwxr-xr-x 4 ctmagent controlm 1024 May 24 2010 ctmagent drwxrwxrwx 3 edwprod edw 1024 Dec 1 09:53 edi drwxrwxrwx 120 edwprod edw 5120 Dec 27 09:37 edw /osmf/mgmt/scheduler> 我可以使用单个命令删除edi和edw吗?