Macos 在Bash中处理依赖进程
我有一个长时间运行的命令(Macos 在Bash中处理依赖进程,macos,bash,redis,zsh,Macos,Bash,Redis,Zsh,我有一个长时间运行的命令(sidekiq,如果您必须知道的话),它依赖于另一个长时间运行的进程(redis server,您可能已经从前面的括号中猜到了) 我想写一个Bash(好吧,实际上是Zsh)别名,在后台启动redis服务器,然后运行sidekiq,当我使用ctrl-C中断sidekiq时,终止后台redis作业。如果相关的话,我在Mac上,只需要支持OSX 所以我要找的是: redis服务器&;西德基;杀死美元 不幸的是,我对sidekiq命令的中断也阻止了kill的发生。有没有办法做到
sidekiq
,如果您必须知道的话),它依赖于另一个长时间运行的进程(redis server
,您可能已经从前面的括号中猜到了)
我想写一个Bash(好吧,实际上是Zsh)别名,在后台启动redis服务器
,然后运行sidekiq
,当我使用ctrl-C
中断sidekiq
时,终止后台redis作业。如果相关的话,我在Mac上,只需要支持OSX
所以我要找的是:
redis服务器&;西德基;杀死美元代码>
不幸的是,我对sidekiq
命令的中断也阻止了kill
的发生。有没有办法做到这一点
如果这可以是一个单行别名而不是函数,则会获得额外的积分。如果我不必事先写入任何文件(如打开/usr/local/etc/redis.conf
中的daemonize
标志),则可获得双倍积分。可能是这样的:
#!/bin/zsh
redis-server &
redispid=$!
trap 'kill $redispid' INT
sidekiq
+1我会将其设置为函数而不是脚本,以更紧密地匹配别名请求。我不确定trap
在函数中的工作情况如何,因为它没有在自己的进程中运行。嗯,这一点很好。我想说的是将函数体设置为子shell,但这可能与脚本没有太大区别。对于别名,我只需执行alias sidekiqer=“redis server&;redispid=$!;trap'kill$redispid'INT;sidekiq”
非常感谢!确保使用单引号,所以$代码>在使用别名之前不会展开。定义别名时,您的方式将扩展它。