Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Linux如何在后台进程中运行cat和取消链接_Php_Linux_Unix_Merge_Background Process - Fatal编程技术网

Php Linux如何在后台进程中运行cat和取消链接

Php Linux如何在后台进程中运行cat和取消链接,php,linux,unix,merge,background-process,Php,Linux,Unix,Merge,Background Process,我有多个文件块,应该合并到一个文件中,完成后,我想删除这些片段。我怎样才能做到这一点? 我试过了 这是一个偶然的机会,我的意思是,如果cat还没有完成,并且它已经删除了片段,那么它就不会生成一个完整的文件。 那么,在猫完成后,我如何开始取消链接呢 请注意,我将使用exec()在PHP中运行此命令;我需要它在后台进程中运行,以便用户体验顺畅(上传文件后,用户可以在文件合并时移动到不同的页面)使用&&而不是要分离命令,请确保在成功运行cat后取消链接 cat 511MB.zip0 511MB.zip

我有多个文件块,应该合并到一个文件中,完成后,我想删除这些片段。我怎样才能做到这一点? 我试过了

这是一个偶然的机会,我的意思是,如果cat还没有完成,并且它已经删除了片段,那么它就不会生成一个完整的文件。 那么,在猫完成后,我如何开始取消链接呢


请注意,我将使用exec()在PHP中运行此命令;我需要它在后台进程中运行,以便用户体验顺畅(上传文件后,用户可以在文件合并时移动到不同的页面)

使用
&&
而不是
要分离命令,请确保在成功运行
cat
后取消链接

cat 511MB.zip0 511MB.zip1 511MB.zip2 511MB.zip3 511MB.zip4 511MB.zip5 > 511MB.zip && unlink 511MB.zip0 && unlink 511MB.zip1 && unlink 511MB.zip2 && unlink 511MB.zip3 && unlink 511MB.zip4 && unlink 511MB.zip5

使用
&&
代替
要分离命令,请确保在成功运行
cat
后取消链接

cat 511MB.zip0 511MB.zip1 511MB.zip2 511MB.zip3 511MB.zip4 511MB.zip5 > 511MB.zip && unlink 511MB.zip0 && unlink 511MB.zip1 && unlink 511MB.zip2 && unlink 511MB.zip3 && unlink 511MB.zip4 && unlink 511MB.zip5

看在上帝的份上,使用变量:

(files="511MB.zip0 511MB.zip1 511MB.zip2 511MB.zip3 511MB.zip4 511MB.zip5"
 cat $files > 511MB.zip; unlink $files) &
这是基本的干燥(不要重复你自己)的东西。如果
unlink
实际上一次只获取一个文件,那么使用
for
循环(但是,为什么不使用
rm
而不是
unlink
?)。如果名称包含空格,则使用数组。还是干吧

cat
unlink
之间的分号确保了顺序执行;在连接完成之前,取消链接不会开始。你不需要做任何其他事情

如果在后台单独运行
cat
,您将遇到问题:

# !!BAD!!
(files="511MB.zip0 511MB.zip1 511MB.zip2 511MB.zip3 511MB.zip4 511MB.zip5"
 cat $files > 511MB.zip &
 unlink $files) &
# !!BAD!!

看在上帝的份上,使用变量:

(files="511MB.zip0 511MB.zip1 511MB.zip2 511MB.zip3 511MB.zip4 511MB.zip5"
 cat $files > 511MB.zip; unlink $files) &
这是基本的干燥(不要重复你自己)的东西。如果
unlink
实际上一次只获取一个文件,那么使用
for
循环(但是,为什么不使用
rm
而不是
unlink
?)。如果名称包含空格,则使用数组。还是干吧

cat
unlink
之间的分号确保了顺序执行;在连接完成之前,取消链接不会开始。你不需要做任何其他事情

如果在后台单独运行
cat
,您将遇到问题:

# !!BAD!!
(files="511MB.zip0 511MB.zip1 511MB.zip2 511MB.zip3 511MB.zip4 511MB.zip5"
 cat $files > 511MB.zip &
 unlink $files) &
# !!BAD!!


由于带宽原因,他在传输之前一定使用了文件拆分器。@SparKot我在发布后意识到了这一点。
&
将其置于后台。将输出从
stdout
stderr
重定向到日志文件。由于带宽原因,他在传输之前一定使用了文件拆分器。@SparKot我在发布后意识到了这一点。
&
将其置于后台。将输出从
stdout
stderr
重定向到日志文件。分号强制顺序执行;在cat完成之前,取消链接不会发生。但是如果cat失败,取消链接仍然会发生。是的,但问题不是“如果
cat
失败”,而是“如果
cat
未完成”…分号确保
cat
已完成。
&&
没有错,但不是必需的。分号强制顺序执行;在cat完成之前,取消链接不会发生。但是如果cat失败,取消链接仍然会发生。是的,但问题不是“如果
cat
失败”,而是“如果
cat
未完成”…分号确保
cat
已完成。
&&
没有错,但不是必需的。因为我们使用的是变量文件,如果多个事件同时发生,会发生什么?例如上传5个文件,所以有5个文件要合并?如果文件中有空格,那么使用数组是什么意思?@Harts:你说的“多个事件同时发生”是什么意思?您可能有多组压缩文件,但从某个地方,您知道要连接到单个大zip文件的文件列表。
bash
中的数组应该是
files=(511MB.zip051Mb.zip1…511MB.zip5)
。然后使用“${files[@]}”引用文件名列表。如果操作得当,这将在文件名中保留空格,这就是为什么要使用它。在这个例子中,没有空间可以担心。我的意思是,例如:我上传了3个500MB的文件(A,B,C)。。所以它将是a.zip0,a.zip1。。b、 zip0、b.zip1等等。上传完成后,通过ajax调用,我将为每个文件调用exec函数,在这种情况下,将同时或几乎同时调用3个文件。这意味着我们将使用相同的变量files=a.zip0 a.zip1作为第一个变量,如果尚未完成,则将再次调用exec()-->files=b.zip0 b.zip1…您将运行三个单独的进程。一个将处理
a.zip0
<代码>a.zip5;一个将处理
b.zip0
<代码>b.zip5;另一个
c.zip0
<代码>c.zip5。每个流程都有自己的变量和自己的文件列表;每个流程都独立于其他流程。了解流程是如何工作的很重要。(你真的应该使用
rm
而不是
unlink
,我认为。)是的,我使用rm似乎更好地处理多个文件,只是它仍然不知道如何使用space处理文件,因为我们使用的是变量文件,如果多个事件同时发生会发生什么?例如上传5个文件,所以有5个文件要合并?如果文件中有空格,那么使用数组是什么意思?@Harts:你说的“多个事件同时发生”是什么意思?您可能有多组压缩文件,但从某个地方,您知道要连接到单个大zip文件的文件列表。
bash
中的数组应该是
files=(511MB.zip051Mb.zip1…511MB.zip5)
。然后使用“${files[@]}”引用文件名列表。如果操作得当,这将在文件名中保留空格,这就是为什么要使用它。举个例子,有