首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux命名管道- MKFIFO查询

Linux命名管道- MKFIFO查询
EN

Stack Overflow用户
提问于 2018-08-01 20:20:43
回答 1查看 442关注 0票数 0

我在命名Linux BASH、命名管道等方面还是个新手。我遵循了本文中的一个示例:https://www.linuxjournal.com/content/using-named-pipes-fifos-bash都工作得很好,正如预期的那样。然而,这仅仅是个开始。我希望能够从阅读器调用编写器脚本,在管道中的2个脚本之间传递信息,而不必为编写器脚本创建cron作业。

其想法是,有人在没有提升权限的情况下触发阅读器脚本。读取器调用具有某些硬编码sudo用户的写入器(出于测试目的),评估数据并将结果返回给读取器。任何建议都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2018-08-03 22:34:22

据我所知,您需要满足以下条件:

  1. 侦听将数据写入命名管道的请求的编写器。
  2. 将数据请求发送到编写器并从命名管道读取数据的读取器。
  3. 编写器进程应作为特权用户运行,读取器应作为欠特权用户运行。

1和2可以使用以下脚本,其中:

  • 写入器在后台运行并侦听请求:sh writer.sh &
  • 当读取器运行时,它会向写入器发送一个信号,以触发将数据写入命名管道
  • 然后读取器随后从管道读取并输出数据。

3是不可能的,因为:

  • 具有较低权限的进程无法向具有较高权限的进程发送信号。请参见this
  • Alternatively,由具有较低权限的用户运行的脚本无法启动具有较高权限的另一个脚本(即读者无法启动具有较高权限的编写器)

writer.sh

代码语言:javascript
复制
#!/bin/bash

# Store the value of the writer process
echo $$ > /tmp/pid
# Specify location of named pipe
pipe=/tmp/datapipe

# Create Data pipe if it doesn't exist
if [[ ! -p $pipe ]]; then
   echo "Pipe does not exist. Creating..."
   mkfifo $pipe
fi

# Send data to pipe
echo "Hello" >$pipe

# Send data to pipe based on trigger
function write_data {
   echo "Writing data"
   echo "Here is some data" >$pipe &
}

# Kill process based on trigger
function kill {
   echo "Exiting"
   exit
}

# Listen for signals
trap write_data SIGINT
trap kill KILL

# listen
while true; do
   sleep 1;
done

reader.sh

代码语言:javascript
复制
#!/bin/bash
pipe=/tmp/datapipe

# Read the writer pid
pid=$(cat /tmp/pid)  

# Trigger writer to create data
kill -s SIGINT $pid

# Read data from named pipe
if read line <$pipe; then
   echo $line
fi
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51633182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档