我想生成一个随机密码,并且这样做:
</dev/urandom tr -dc [:print:] | head -c 64
Run Code Online (Sandbox Code Playgroud)
在我运行 Ubuntu 的笔记本电脑上,这仅产生预期的可打印字符。但是,当我通过 ssh 连接到运行 Red Hat Enterprise Linux 的学校服务器并在那里运行时,我得到类似 的输出3!ri?b?Gr???1?H?<?oM????&?nMC[?Pb?|L%MP?????9??fL2q???IFmsd|l?K,但根本无法执行。这里可能出了什么问题?
当我make从 shell运行命令(在一个大项目上)时,我可以输入 Ctrl-Z 来停止进程并返回到 shell。随后,我可以运行fg以继续该过程。
我正在尝试编写一个 shell 脚本来自动执行此操作(具体来说,每隔几秒钟检查一次我的 CPU 温度,并在温度过高时停止该过程,因为我的计算机容易过热)。我的第一次尝试是这样工作的(简化):
make &
subpid="$!"
sleep 2
# If the CPU temperature is too high...
kill -STOP "$subpid"
sleep 2
# If the CPU temperature has dropped to safe levels...
kill -CONT "$subpid"
wait "$subpid"
Run Code Online (Sandbox Code Playgroud)
不幸的是,这没有用。向进程发送 SIGSTOP 并没有暂停它(正如它继续向终端发送输出所证明的那样)。我make &在命令行运行,发送 SIGSTOP,并使用ps;检查进程状态;它被列为已停止(并在我发送 SIGCONT 时再次启动),但它仍在喷出输出并提高我的核心温度!用 Ctrl-Z 停止它从来没有出现过这个问题,但我不知道如何在脚本中做到这一点。
是什么让 Ctrl-Z 与 不同kill -STOP,我如何在 shell 脚本中获得前者的行为?