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”
非常感谢!确保使用单引号,所以
$在使用别名之前不会展开。定义别名时,您的方式将扩展它。