是否可以在其启动参数中设置进程终止?
我想要做的是设置一个进程在它开始之前或它开始时终止。
cat > $pipe
当我尝试通过添加 & 和 $来获取打开的命名管道的 pid 时!在它之后,它用“>”符号向终端发送垃圾邮件,所以我想知道是否可以从cat > $pipe
一个参数开始,在 PID 的 SIGHUP 上死掉。
我该怎么做呢?如果我在 之后放任何东西,它对cat > $pipe
我来说将无法正常工作。
是否可以在其启动参数中设置进程终止?
我想要做的是设置一个进程在它开始之前或它开始时终止。
cat > $pipe
当我尝试通过添加 & 和 $来获取打开的命名管道的 pid 时!在它之后,它用“>”符号向终端发送垃圾邮件,所以我想知道是否可以从cat > $pipe
一个参数开始,在 PID 的 SIGHUP 上死掉。
我该怎么做呢?如果我在 之后放任何东西,它对cat > $pipe
我来说将无法正常工作。
“获取打开的命名管道的 pid” 命名管道没有 pid,只有进程有 pid(线索在 'p' 中)
但是,这似乎与问题的标题无关。默认情况下,进程将在 SIGHUP 上终止。但是,子进程继承父进程的信号掩码,因此如果父进程忽略 SIGHUP,那么子进程就会出现这种情况(对于处理程序而言并非如此)。因此,您可以使用(例如)强制模具:
trap 'exit 128' SIGHUP
但是问题的这一部分与命名管道有什么关系呢?您是否正在尝试查找哪些进程打开了管道?您可以为此迭代 /proc 。
在 OP 发表评论后进行编辑:
如果您运行,cat > mypipe &
那么cat
将挂起尝试访问键盘 -cat
默认情况下读取 STDIN。
[1]+ Stopped cat > mypipe
因此,您必须将其带入前台(fg
)才能输入数据,通常以<CTRL>+D
. 我不知道你为什么要以cat
这种方式使用。
无论如何,如果你在后台运行,很容易获得后台作业的 pid:
假设它是 1 号作业
set $(jobs -l %1)
pid=$2
也许您可以进一步调查为什么您不能在后台运行该作业,并显示一个示例(使用该script
命令在名为 的文件中获取会话副本typescript
)
你试过把它放在括号里吗?(cat > $pipe) &$