因此,在创建命令之前,我运行了该命令find / .bash_profile
以查看它是否存在于我的 Mac 上。搜索整个计算机显然需要一分钟的时间,所以我想在后台运行它(这是我以前从未尝试过的事情),所以我&
在末尾添加了一个,如下所示:find / .bash_profile &
但是,它并没有在后台运行并让我做其他事情,而是使该过程无法中断!它继续在前台运行,但Ctrl不再C有任何效果;只有完全关闭终端实例才能停止它。
我在这里遗漏了什么?
答案1
它确实在后台运行,您可以做其他事情,但只要它输出某些内容,它就会输出到您当前的终端。
建议:
find / -name .bash_profile >my_result.txt 2>/dev/null &
这会将输出保存到文件,并丢弃所有错误(例如权限被拒绝错误)。您可以通过查看输出文件tail my_result.txt
或键入 来检查状态jobs
。
如果需要终止该作业,请输入kill %1
其中 1 是作业编号jobs
。
答案2
您确定该进程在前台吗?仅仅因为它正在将输出写入终端并不意味着它在前台。
如果你有一个产生输出的命令,并且你想在后台运行它,你应该重定向输出如下:
find / -name .bash_profile > find_results &
后台进程不受中断影响是正常的(Ctrl+ C),因此您可以中断前台作业而不会干扰后台作业。(顺便说一句,请注意,您的命令是错误的。)
答案3
您无意中发现了我的一个烦恼find
。尝试使用-print
如下选项
find / -name '.bash_profile' -print > some_file
您可能还会遇到问题,因为没有对文件名中的点进行转义或单引号。find
支持 RegEx 语法,因此文件名中的点可能会被误解。以下任一示例都应该可以解决这个问题
find / -name 'some_file.txt' ...
或者
find / -name some_file\.txt ...
单引号更灵活,因为你不必转义每个控制字符,你可以更轻松地括住 @ 或 / 等字符