Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.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
如何在Bash中创建一个开销为零但给我一个进程ID的进程_Bash_Procfile - Fatal编程技术网

如何在Bash中创建一个开销为零但给我一个进程ID的进程

如何在Bash中创建一个开销为零但给我一个进程ID的进程,bash,procfile,Bash,Procfile,对于那些知道你在说什么的人,我为我将要表达这个问题的方式遭到破坏而道歉。我对bash一无所知。有了这个警告,让我拿出我的切肉刀 我正在构建一个Rails应用程序,它有一个名为procfile的文件,可以设置需要在不同环境中运行的任何进程 e、 g 这些行中的每一行都指定了要运行的进程。它还希望在进程启动后返回pid。语法是 process_name: process_invokation_script 然而,最后一个过程,proxylocal,实际上只是启动了一个正在开发的过程。在生产中,它什

对于那些知道你在说什么的人,我为我将要表达这个问题的方式遭到破坏而道歉。我对bash一无所知。有了这个警告,让我拿出我的切肉刀

我正在构建一个Rails应用程序,它有一个名为procfile的文件,可以设置需要在不同环境中运行的任何进程

e、 g

这些行中的每一行都指定了要运行的进程。它还希望在进程启动后返回pid。语法是

process_name: process_invokation_script
然而,最后一个过程,
proxylocal
,实际上只是启动了一个正在开发的过程。在生产中,它什么都不做


不幸的是,这会导致Procfile阻塞,因为它需要返回一个进程ID。那么,在这种情况下,是否有一些超级简单、零开销的过程可以让procfile保持愉快?

如果Heroku没有使用
proxylocal
做任何事情,我不知道你为什么要在procfile中使用它。我还对您是否要更改Procfile或
bin/proxylocal\u local
的作用以及您将如何更改Procfile感到有点困惑


也就是说,如果你能为制作做任何你想做的事情,你的脚本可以调用
cat
,它会创建一个pid,然后坐在那里等待下一个命令(它永远不会出现)。

如果Heroku没有使用
proxylocal
我不知道你为什么要在程序中使用它。我还对您是否要更改Procfile或
bin/proxylocal\u local
的作用以及您将如何更改Procfile感到有点困惑


这就是说,如果您能够为生产做任何您喜欢的事情,那么您的脚本只需调用
cat
,它将创建一个pid,然后坐在那里等待下一个命令(它永远不会出现)。

sleep命令在指定的时间段内不执行任何操作,开销非常低。给它一个比代码运行时间长的参数

比如说

sleep 2147483647
在231-1秒的时间里什么都不做,刚刚超过68年。我选择这个数字是因为
sleep
的任何合理实现都应该能够处理它

在不太可能的情况下,这不起作用(例如,如果您使用的是旧的16位系统,无法
睡眠
超过216-1秒),您可以在无限循环中执行
睡眠

sh -c 'while : ; do sleep 30000 ; done'
这假设您需要流程运行很长时间;这取决于您的应用程序需要对进程ID执行什么操作。如果在应用程序运行期间要求它是唯一的,那么您需要一些将持续运行很长时间的东西;如果进程终止,它的PID可以被另一个进程重新使用

如果这不是一个要求,您可以使用
sleep 0
true
,这将立即终止


如果您需要在进程终止之前给应用程序一点时间来获取进程ID,类似于
sleep 10
甚至
sleep 1
的操作可能会起作用,但确定它需要运行多长时间可能会很棘手且容易出错。

sleep
命令在指定的时间段内不起任何作用,具有非常低的开销。给它一个比代码运行时间长的参数

比如说

sleep 2147483647
在231-1秒的时间里什么都不做,刚刚超过68年。我选择这个数字是因为
sleep
的任何合理实现都应该能够处理它

在不太可能的情况下,这不起作用(例如,如果您使用的是旧的16位系统,无法
睡眠
超过216-1秒),您可以在无限循环中执行
睡眠

sh -c 'while : ; do sleep 30000 ; done'
这假设您需要流程运行很长时间;这取决于您的应用程序需要对进程ID执行什么操作。如果在应用程序运行期间要求它是唯一的,那么您需要一些将持续运行很长时间的东西;如果进程终止,它的PID可以被另一个进程重新使用

如果这不是一个要求,您可以使用
sleep 0
true
,这将立即终止


如果您需要在进程终止之前给应用程序一点时间来获取进程ID,像
sleep 10
甚至
sleep 1
这样的方法可能会起作用,但确定它需要运行多长时间可能会很棘手,而且容易出错。

为了真正减少开销,您不想运行任何外部命令。当shell启动命令时,它首先自身分叉,然后子shell执行外部命令。如果分叉子项可以运行内置项,则可以跳过
exec

首先在某处创建一个只读fifo

mkfifo foo
chmod 400 foo
然后,每当您需要一个不做任何事情的进程时,只需fork一个shell来尝试从fifo读取数据。它是只读的,因此没有人可以写入它,所以所有读取都将被阻止

read < foo &
read
为了将开销降到最低,您不需要运行任何外部命令。当shell启动命令时,它首先自身分叉,然后子shell执行外部命令。如果分叉子项可以运行内置项,则可以跳过
exec

首先在某处创建一个只读fifo

mkfifo foo
chmod 400 foo
然后,每当您需要一个不做任何事情的进程时,只需fork一个shell来尝试从fifo读取数据。它是只读的,因此没有人可以写入它,所以所有读取都将被阻止

read < foo &
read
您所能创建的任何内容都不能完全实现零开销。但是,在Linux上,进程创建(通过和…)非常便宜。如果可以在开发和生产环境之间改变
proxylocal
(或者是
proxylocal\u local
?)的行为,为什么不能改变procfile的内容?或者,这可能是一个坏主意,因为开发和生产环境至少应该是