我正在pdftoppm将用户提供的 PDF 转换为 300DPI 图像。这很好用,除非用户提供页面非常大的 PDF。 pdftoppm将分配足够的内存来在内存中保存该大小的 300DPI 图像,对于 100 英寸的方形页面,它是 100*300 * 100*300 * 4 字节/像素 = 3.5GB。恶意用户可以给我一个愚蠢的大 PDF 并导致各种问题。
所以我想做的是对我即将运行的子进程的内存使用设置某种硬限制——如果它试图分配超过 500MB 的内存,就让进程死掉。那可能吗?
我不认为 ulimit 可以用于此,但是否有一个等价的进程?
如何在 Bash 中找到发生错误的行号?
我创建了以下带有行号的简单脚本来解释我们需要什么。该脚本将从中复制文件
cp $file1 $file2
cp $file3 $file4
Run Code Online (Sandbox Code Playgroud)
当其中一个cp命令失败时,该函数将以exit 1 退出。我们希望向函数添加还打印带有行号(例如,8 或 12)的错误的功能。
这可能吗?
1 #!/bin/bash
2
3
4 function in_case_fail {
5 [[ $1 -ne 0 ]] && echo "fail on $2" && exit 1
6 }
7
8 cp $file1 $file2
9 in_case_fail $? "cp $file1 $file2"
10
11
12 cp $file3 $file4
13 in_case_fail $? "cp $file3 $file4"
14
Run Code Online (Sandbox Code Playgroud) 在 shell 脚本中,我们可以expr $a*$b用$(($a+$b)).
但为什么不只是 with (($a+$b)),因为在任何资源中,它(())都是为整数计算而编写的。
所以我们$(())在有变量而不是整数值时使用,是吗?$(())当变量可以接收浮点值时,我们应该使用什么来代替?
bash ×3
linux ×2
shell-script ×2
exit-status ×1
expr ×1
logs ×1
math ×1
memory ×1
scripting ×1
ulimit ×1