小编poi*_*ige的帖子

如何让 `xargs` 忽略孩子的退出并继续进一步处理

我有时会在xargs一夜之间运行很长时间的工作,并且在早上发现xargs中间某个地方死了真的很烦人,例如因为在一个特殊情况下的分段错误,就像今晚发生的那样。

即使一个xargs孩子被杀死,它也不会处理任何更多的输入:

控制台 1:

[09:35:48] % seq 40 | xargs -i --max-procs=4 bash -c 'sleep 10; date +"%H:%M:%S {}";'
xargs: bash: terminated by signal 15
09:35:58 3
09:35:58 4
09:35:58 2
<Exit with code 125>
Run Code Online (Sandbox Code Playgroud)

控制台 2:

[09:35:54] kill 5601
Run Code Online (Sandbox Code Playgroud)

xargs一旦子进程终止并继续处理,我能否以某种方式阻止停止处理更多输入?

kill signals xargs

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

带有位置参数的 Bash -c

通常,$0在脚本中设置为脚本的名称,或者它被调用的任何内容(包括路径)。但是,如果我使用bash-c选项,$0则设置为在命令字符串之后传递的第一个参数:

bash -c 'echo $0' foo bar 
# foo 
Run Code Online (Sandbox Code Playgroud)

实际上,位置参数似乎已经发生了变化,但包括$0. 但是shift在命令字符串中不影响$0(正常):

bash -c 'echo $0; shift; echo $0' foo bar
# foo
# foo
Run Code Online (Sandbox Code Playgroud)

为什么命令字符串的这种明显奇怪的行为?请注意,我正在寻找实施这种奇怪行为背后的原因和基本原理。


人们可以推测这样的命令字符串不需要$0通常定义的参数,因此为了经济起见,它也用于普通参数。但是,在这种情况下, 的行为shift很奇怪。另一种可能性是$0用于定义程序的行为(bash称为 asshvim称为 as vi),但不能如此,因为$0这里仅在命令字符串中可见,而不是在其中调用的程序中可见。我想不出任何其他用途$0,所以我无法解释这一点。

bash

18
推荐指数
2
解决办法
5414
查看次数

如何提前配置 Linux 内核以在恐慌时重新启动?

您可以在内核命令行上输入“panic=N”,使系统在发生恐慌后 N 秒重新启动。

但是在引导加载程序发挥作用之前,是否有一个配置选项来指定这个(除了默认的内核命令行选项)?某些内核选项可能是?

linux kernel-panic linux-kernel

15
推荐指数
3
解决办法
5万
查看次数

最优雅的管道摆脱你能想到的空行?

例如,less具有选项--squeeze-blank-lines(或-s简而言之)并且它将多个空行压缩为单个空行,buuut,less不会将其用作过滤器(即,将其输出发送到不发送到 tty)。

也可以找到类似的选项cat,它也被称为-s通常,它也使单个空行而不是多个空行。

一起删除空行/空白行怎么样?我能想到的一种方法是使用grep,但可能我忽略了一些更简单的方法?

text-processing

12
推荐指数
1
解决办法
9082
查看次数

可靠地确定 BSD 中的可用内存

Linux 发行版倾向于(但不是必需的)包含freefrom procps,这可以很好地简洁地显示内存消耗:

# free -m
              total        used        free      shared  buff/cache   available
Mem:           7688        5027         180         827        2479        1589
Swap:          8189        2082        6106
Run Code Online (Sandbox Code Playgroud)

为了在 BSD 中近似这一点,我尝试了许多不同的项目,但它们都给了我不同的答案(大概是因为它们有不同的上下文?)。例如:

# sysctl -a |grep Memory
Virtual Memory:             (Total: 1077397132K, Active 3458308K)
Real Memory:                (Total: 1171952K Active 975744K)
Shared Virtual Memory:      (Total: 56264K Active: 38652K)
Shared Real Memory: (Total: 22184K Active: 19700K)
Free Memory Pages:  1664588K

# sysctl hw |awk '/mem:/ { printf "%s %.0fM\n", $1, $2/1024^2 }'
hw.physmem: 32756M …
Run Code Online (Sandbox Code Playgroud)

freebsd memory bsd top

12
推荐指数
1
解决办法
3776
查看次数

Linux:有没有方便的方法来执行将其绑定到所选 IP 地址的程序?

在 FreeBSD 4.9 中,只需一个命令即可轻松完成,例如

jail [-u username]  path hostname ip-number command
Run Code Online (Sandbox Code Playgroud)

如果路径是/你像往常一样运行相同的程序,但它的所有网络通信都被限制为仅使用给定的 IP 地址作为源。有时它非常方便。

现在在 Linux 中有 LXC,它看起来与 FreeBSD jail(或 Solaris 的区域)非常相似——你能想出类似的方式来执行程序吗?

linux freebsd ip jails lxc

11
推荐指数
1
解决办法
1599
查看次数

为什么 FreeBSD 丢失了 w 掩码而 Debian 保留了它?

我试图了解 FreeBSD ACL 和 Linux ACL 之间的行为差​​异。特别是默认 ACL 的继承机制。

我在 Debian 9.6 和 FreeBSD 12 上都使用了以下内容:

$ cat test_acl.sh
#!/bin/sh

set -xe

mkdir storage
setfacl -d -m u::rwx,g::rwx,o::-,m::rwx storage

touch outside
cd storage
touch inside
cd ..

ls -ld outside storage storage/inside

getfacl -d storage
getfacl storage
getfacl outside
getfacl storage/inside

umask
Run Code Online (Sandbox Code Playgroud)

我从 Debian 9.6 得到以下输出:

$ ./test_acl.sh
+ mkdir storage
+ setfacl -d -m u::rwx,g::rwx,o::-,m::rwx storage
+ touch outside
+ cd storage
+ touch inside
+ cd ..
+ …
Run Code Online (Sandbox Code Playgroud)

linux freebsd acl permissions

10
推荐指数
1
解决办法
266
查看次数

如何在 FreeBSD 中访问 Solaris 子分区?

首先,Linux 检测分区:

sdg1: <solaris: [s0] sdg5 [s1] sdg6 [s2] sdg7 [s8] sdg8 >
Run Code Online (Sandbox Code Playgroud)

然而,FreeBSD 9.0 只显示主分区。是否可能仅支持 sparc64 的 Solaris 标签?

freebsd partition solaris

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

当我输入 {+&lt;ENTER&gt; 时 X 窗口终止

特别是当我输入以下键盘组合时:

<hold shift> [ <release shift> <enter>

我从 KDE 中退出并看到一些控制台输出的闪光,但我在任何日志中都找不到它。

我正在运行 Fedora 15(升级很困难)。

有没有人有任何想法?

更新:这发生在跨应用程序。在 Intellij IDE 中,在终端中。

更新:当我输入时也会发生= <hold shift> 2 <release shift>

更新:经过一番挖掘,我可以在 /var/log/messages 中看到它已将一些信息转储到 /var/spool/abrt/ccpp-2012-07-20-10:50:21-1395 并在其中告诉我知道 /usr/bin/Xorg 被发送了一个 SIGABRT。

fedora kde xorg

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

如何避免在 seq 完成时打印换行符?

要创建列标题,如下所示:

1234567890123456789
Run Code Online (Sandbox Code Playgroud)

我(正在尝试)使用 seq 和 echo:

seq -s '' 1 9 ; echo -n 0; seq -s '' 1 9
Run Code Online (Sandbox Code Playgroud)

但是, seq 在每次运行后都会输出一个换行符。我怎样才能避免这种情况?

gnu seq

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

标签 统计

freebsd ×4

linux ×3

acl ×1

bash ×1

bsd ×1

fedora ×1

gnu ×1

ip ×1

jails ×1

kde ×1

kernel-panic ×1

kill ×1

linux-kernel ×1

lxc ×1

memory ×1

partition ×1

permissions ×1

seq ×1

signals ×1

solaris ×1

text-processing ×1

top ×1

xargs ×1

xorg ×1