我正在使用飞思卡尔 IMX6 四核处理器。我想知道该top命令是否列出了所有 4 个内核或单个内核的 CPU 使用率。我看到应用程序的 CPU 使用率与 4 核和单核相同。我猜测应用程序的 CPU 使用率会在单核上增加而在 4 核上减少,但它没有改变。
我想尽可能快地编译。去搞清楚。并想自动选择-j选项后面的数字。如何以编程方式选择该值,例如在 shell 脚本中?
输出是否nproc等于我可用于编译的线程数?
make -j1
make -j16
.txt 文件中有一个 IP 地址列表,例如:
1.1.1.1
2.2.2.2
3.3.3.3
Run Code Online (Sandbox Code Playgroud)
每个 IP 地址后面都有一个服务器,并且在每个服务器上都有一个在端口 22 上运行的 sshd。并非每个服务器都在known_hosts列表中(在我的 PC 上,Ubuntu 10.04 LTS/bash)。
如何在这些服务器上运行命令并收集输出?
理想情况下,我想在所有服务器上并行运行这些命令。
我将在所有服务器上使用公钥身份验证。
以下是一些潜在的陷阱:
known_hosts文件中。服务器是 AIX/ksh(但我认为这并不重要。
Linux 中是否有任何工具/命令可用于同时在多个选项卡中运行命令?我想运行相同的命令:./myprog argument1 argument2同时在多个 shell 中检查互斥锁是否在线程程序中正常工作。我希望能够增加这个程序的实例数量,以便以后让我的代码承受压力。
我正在寻找类似 wall 的东西。我可以考虑使用 tty,但是如果我必须将其扩展到更多 shell,那似乎很痛苦。
我有一个文件夹,其中包含 250 多个文件,每个文件大小为 2 GB。我需要在这些文件中搜索字符串/模式并将结果输出到output文件中。我知道我可以运行以下命令,但是太慢了!!
grep mypattern * > output
Run Code Online (Sandbox Code Playgroud)
我想加快速度。作为一名 Java 程序员,我知道多线程可用于加快进程。我被困在如何以grep“多线程模式”启动并将输出写入单个output文件。
我需要下载一个大文件(1GB)。我也可以访问多台运行 Linux 的计算机,但每台计算机的下载速度都受到管理员策略的限制,下载速度为 50kB/s。
如何在多台计算机上分发下载此文件并在下载所有段后合并它们,以便我可以更快地接收它?
假设磁盘 I/O 和可用 RAM 是瓶颈(而 CPU 时间不是限制),是否存在可以一次计算多个消息摘要的工具?
我对计算大文件(以千兆字节为单位)的 MD-5 和 SHA-256 摘要特别感兴趣,最好是并行计算。我试过openssl dgst -sha256 -md5,但它只使用一种算法计算散列。
预期行为的伪代码:
for each block:
for each algorithm:
hash_state[algorithm].update(block)
for each algorithm:
print algorithm, hash_state[algorithm].final_hash()
Run Code Online (Sandbox Code Playgroud) 我在一个目录中有一堆 PNG 图像。我有一个名为 pngout 的应用程序,我运行它来压缩这些图像。这个应用程序是由我做的脚本调用的。问题是这个脚本一次执行一个,如下所示:
FILES=(./*.png)
for f in "${FILES[@]}"
do
echo "Processing $f file..."
# take action on each file. $f store current file name
./pngout -s0 $f R${f/\.\//}
done
Run Code Online (Sandbox Code Playgroud)
一次只处理一个文件,需要很多时间。运行此应用程序后,我看到 CPU 仅为 10%。所以我发现我可以将这些文件分成 4 个批次,将每个批次放在一个目录中并从四个终端窗口、四个进程中触发 4 个,所以我有四个脚本实例,同时处理这些图像和工作需要 1/4 的时间。
第二个问题是我浪费了时间分割图像和批处理并将脚本复制到四个目录,打开4个终端窗口,bla bla ...
如何用一个脚本做到这一点,而不必分割任何东西?
我的意思是两件事:首先,我如何从 bash 脚本启动一个进程到后台?(只是在最后加&?) 第二:如何在发送第四个任务后停止向后台发送任务并让脚本等待任务结束?我的意思是,只是在一个任务结束时向后台发送一个新任务,始终保持 4 个任务并行?如果我不这样做,循环将向后台发送无数个任务,CPU 将阻塞。
我正在使用xargs选项--max-args=0(或者-P 0)。
然而,进程的输出被合并到stdout流中而不考虑适当的行分离。所以我经常会以这样的行结束:
<start-of-line-1><line-2><end-of-line-1>
Run Code Online (Sandbox Code Playgroud)
当我在整个输出的模式中使用egrepwith 时^,xargs这弄乱了我的结果。
有没有办法强制xargs按顺序写入进程输出(任何顺序,只要一个进程的输出是连续的)?
或者其他一些解决方案?
编辑:有关用例的更多详细信息:
我想从不同的主机下载和解析网页。由于每个页面都需要大约一秒钟的时间来加载,并且有几十个页面我想并行化请求。
我的命令具有以下形式:
echo -n $IPs | xargs --max-args=1 -I {} --delimiter ' ' --max-procs=0 \
wget -q -O- http://{}/somepage.html | egrep --count '^string'
Run Code Online (Sandbox Code Playgroud)
我使用 bash 而不是 Perl 之类的东西,因为主机 IP($IPs 变量)和其他一些数据来自包含的 bash 文件。
假设我有三个(或更多)的bash脚本:script1.sh,script2.sh,和script3.sh。我想调用所有这三个脚本并并行运行它们。一种方法是执行以下命令:
nohup bash script1.sh &
nohup bash script2.sh &
nohup bash script3.sh &
Run Code Online (Sandbox Code Playgroud)
(通常,脚本可能需要几个小时或几天才能完成,所以我想使用nohup它们以便即使我的控制台关闭它们也能继续运行。)
但是,有没有办法通过一次调用并行执行这三个命令?
我在想像
nohup bash script{1..3}.sh &
Run Code Online (Sandbox Code Playgroud)
但这似乎是按顺序执行script1.sh,script2.sh而script3.sh不是并行执行。