我想并行运行多个 Bash shell 脚本。但是,我想避免竞争条件。我可以为此目的使用哪些 Unix 命令真正具有原子性,我该如何使用它们?
我想知道如何获取当前运行信号量的进程/proc
?我猜 SysVIPC 子目录是可能的。但我不知道如何使用这个命令。
Ubuntu 12.10
通过庆典会后文件,这个问题,这一个它仍然不是很清楚,我哪能执行原子写入(追加)操作在bash文件。我有一个在多个实例中运行的脚本,并且在某些时候必须将数据写入文件:
echo "$RESULT" >> `pwd`/$TEMP_DIR/$OUT_FILE
Run Code Online (Sandbox Code Playgroud)
如何使所有并发运行的脚本的所有写入操作都原子化(以便来自一个实例的数据不会与来自另一个实例的数据重叠)?
我知道自旋锁在 Linux 内核设计中是真正的浪费。
我想知道为什么自旋锁在 Linux 内核设计中是不错的选择,而不是在用户态代码中更常见的东西,例如信号量或互斥锁?
在运行 postgresql 的 Debian lenny 服务器中,我注意到缺少信号量数组会阻止 Apache 启动。
查看限制,我看到最多 128 个数组中使用了 128 个数组,用于信号量。我知道这是问题所在,因为它发生在semget
通话中。
如何增加数组的数量?
PS:我需要运行 Apache 才能使用 phppgadmin。
我有以下 shell 脚本(一行),我想用它来识别具有完全相同内容的目录。我正在使用它来识别和删除重复的(子)目录。
当我尝试使用 运行相同的脚本时sem
,我遇到了No such file or directory
错误。
示例 - 无并行线程
find -type d -links 2 | while read i; do \
find "$i" -type f -print0 | xargs -r0 md5sum | awk '{ print $1 }' \
| sort | md5sum | xargs -I {} echo {} $i ; \
done
Run Code Online (Sandbox Code Playgroud)
给我:
e94d32e2a683d46d49c7580d649f7888 - ./Daft Punk/Alive 2007 2
e94d32e2a683d46d49c7580d649f7888 - ./Daft Punk/Alive 2007
Run Code Online (Sandbox Code Playgroud)
示例 - 使用 sem
e94d32e2a683d46d49c7580d649f7888 - ./Daft Punk/Alive 2007 2
e94d32e2a683d46d49c7580d649f7888 …
Run Code Online (Sandbox Code Playgroud) 命名信号量(使用semaphore.h
)由形式的名称标识/somename
;即,最多 NAME_MAX-4(即 251)个字符的以空字符结尾的字符串,由一个起始斜杠和一个或多个字符组成,其中没有一个是斜杠。
由于名称对应于文件系统中的路径名。这个信号量在哪里?ipcs
用于 System V 信号量。如何定位 POSIX 信号量?