考虑这个示例脚本:
<?php
$pipes = array();
$p = proc_open('cat', array(0 => STDIN, 1 => STDOUT, 2 => STDERR), $pipes);
fgetc(STDIN);
当 /bin/sh 符号链接(symbolic link)到 /bin/dash(Debian 默认设置)时,cat 在 shell 中执行:
30760 pts/0 S+ 0:00 | \_ php f.php
30761 pts/0 S+ 0:00 | \_ sh -c cat
30762 pts/0 S+ 0:00 | \_ cat
然而,当 /bin/sh 链接到 /bin/bash 时,cat 是 php:
30786 pts/0 S+ 0:00 | \_ php f.php
30787 pts/0 S+ 0:00 | \_ cat
这是非常烦人的不一致,它使得无法可靠地向生成的进程发送信号(因为信号有时会被 shell 接收)。
为什么是proc_open根据 /bin/sh 指向的位置表现不同?
有没有办法不运行 shell,即使 /bin/sh 不是 bash?
最佳答案
PHP 在这两种情况下都通过/bin/sh 运行命令,区别在于 shell,而不是 PHP。 dash fork 进程以运行命令(在本例中为 cat)并等待它完成。 bash 执行一个 execve(),因此它将自己的进程替换为 cat。
虽然他们似乎已经在以后的版本中修复了它:https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=436466
使用 bash 或最新版本的 dash 应该可以解决您的问题,因为执行的命令会获取生成的 shell 的 PID,从而接收信号。
关于PHP proc_open bash 与破折号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22644310/
这是字符串:04046955104021109我需要这样格式化:040469551-0402-1109用ruby做到这一点的最短/最有效的方法是什么? 最佳答案 两个简单的插入就可以了:example_string.insert(-9,'-').insert(-5,'-')负数表示您从字符串末尾开始计数。如果您愿意,也可以从头数起:example_string.insert(9,'-').insert(14,'-') 关于ruby-用ruby将2个破折号插入这个字符串的最短方法是
这个问题在这里已经有了答案:Whatisthe->(stab)operatorinRuby?[duplicate](1个回答)Whatdoes->meaninRuby[duplicate](2个答案)关闭9年前。我刚刚在Rails应用程序中遇到了以下代码行:scope:for_uid,->(external_id){where(external_id:external_id)}->运算符是什么意思?Google有点难。
我将jquery-mobile与RubyOnRails结合使用。我想创建一个按钮链接,这意味着data-role="button"出现在生成的HTML中。我试过:"button"%>然后,我得到一个错误undefinedlocalvariableormethod`role'for#:0x007fdc25658610>有没有办法使用:xxx符号来转义破折号,还是我应该只使用"xxx"符号?(我同意这是一个表面问题,但我希望我的代码保持一致并且不喜欢异常) 最佳答案 在符号名称周围使用单引号,并带有冒号前缀::'data-role'=>
在ruby1.9中有没有办法用新语法定义这个散列?irb>{a:2}=>{:a=>2}irb>{a-b:2}SyntaxError:(irb):5:syntaxerror,unexpectedtLABEL{a-b:2}^用旧的,它在工作:irb>{:"a-b"=>2}=>{:"a-b"=>2} 最佳答案 有些合法符号不能与新语法一起使用。我找不到引用,但似乎允许与/^[a-zA-Z_][a-zA-Z_0-9]*[!?]?$/匹配的符号名称新语法。最后一个字符可能是特殊字符“!”或“?”。对于任何不符合这些限制的符号,您必须使用R
当gem名称有多个单词时,我对gem命名约定感到困惑。thinking-sphinx是gem的名称,但此gem的基础*.rb文件是lib/thinking_sphinx.rb(下划线)acts-as-taggable-on是gem的名称,基础*.rb文件称为lib/acts-as-taggable-on.rb(连字符)factory_girl在gem名称和基本*.rb文件的名称中都使用下划线使用下划线或连字符有关系吗?是否有任何正在形成的共识? 最佳答案 EricHodel有一篇关于此的博文:AProjectNamingRecomm
我正在使用lodash将提供给我的用户名拆分为带有某种任意分隔符的字符串。我想使用_.words()将字符串拆分成单词,连字符除外,因为一些用户名包含连字符。例子:_.words(['user1,user2,user3-adm'],RegExp)我希望它产生:['user1','user2','user3-adm']不是这个(没有任何模式的_.words(数组)):['user1','user2','user3','adm']什么是正确的字符串/正则表达式来实现这一点? 最佳答案 最初的情况可以这样解决:_.words(['user
如果你没有从标题中猜到,我正在尝试使用JS将CSS属性语法转换为JS语法。这意味着我想获取输入“margin-top”并将其转换为“marginTop”。我知道这可以通过几行代码和替换函数轻松完成,但我想知道正则表达式是否会有更简单、更紧凑的解决方案。所以,我的问题是,我将使用什么正则表达式来替换-\w且不带破折号且单词的第一个字母大写。如果这恰好是不可能的,那么具有替换功能的最简约的解决方案是什么?感谢您的帮助。 最佳答案 如果您搜索jQuerysource对于camelCase,您会发现这个函数:functioncamelCas
我无法让THREE.LineDashedMaterial在三个js中正常工作(我使用的是r73,但也刚刚尝试过r74)。改变颜色很好,但破折号似乎不起作用。这是我的例子:varsegmentCount=200;varradius=100;vargeometry=newTHREE.Geometry();varmaterial=newTHREE.LineDashedMaterial({color:0xff0000,linewidth:5,dashSize:1.0,gapSize:0.5});//newTHREE.LineBasicMaterial({color:0xFFFFFF,linew
用户可以填写电话号码。(只有数字和破折号,破折号不是强制性的)他可以有尽可能多的(中间)个破折号(-)但是数字的总数必须是10。I'vemanaged使用数字中的"-"的正面前瞻编写正则表达式:^(?=.*\-)[0-9\-]+$但是我有两个问题:破折号(在我的正则表达式中)也可以在开头和结尾,这是无效。我没有成功应用10位数字限制。附注有效示例:050-6783828050-678-38-280506783828不有效:-05067838260506783826-050678--3826p.s.2请注意这个问题被标记为正则表达式。我不是在寻找js(非正则表达式)解决方案。
在dynamoDB中,我有一个表,其中包含用连字符连接的属性。(例如名字)现在我想使用javascript更新它们。到目前为止,这是我的代码://createUpdateExpressionandExpressionAttributeValuesletupdateExpression="set";letexpressionAttributeValues={};if(e.firstName!==null){updateExpression=updateExpression+""+'first-name'+"=:f,";expressionAttributeValues[":f"]=e.f