AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题

问题[exec](unix)

Martin Hope
Manouil
Asked: 2022-07-08 09:34:40 +0800 CST

execve 之后进程的文件结构会发生什么

  • 0

如果我正确理解了手册页,则 fork 和 execve 进程的 fd 表将被复制到子进程并在 execve 中继续存在。另一方面,任何其他内存映射都在 execve 之后被销毁。

因此,当 proc 执行此操作(forks 和 execves)时,我会删除要删除的文件结构。

尽管如此,我还是在我大学的教科书中找到了一个例子:“如果 10 个进程打开一个文件,然后其中一半分叉而另一半被执行,那么内核中会有多少个文件结构?”

答案是 10“因为孩子们共享文件结构。”

但是,我认为它会是 5,因为 execved 的 procs 会破坏它们的文件结构

那么,这是否意味着文件结构在执行后仍保留在内核中?

linux exec
  • 2 个回答
  • 25 Views
Martin Hope
Jan Černý
Asked: 2022-01-20 08:43:45 +0800 CST

如何使用 i3wm 的 exec 启动带有 rofi 的应用程序?

  • 1

我有这个问题,现在我知道如何解决它。我需要使用i3wm的exec命令启动应用程序。

但是我使用rofi作为启动菜单,我不知道如何使用i3wm的exec命令启动应用程序?

我使用此配置绑定了 rofi菜单:

 bindsym $mod+space exec --no-startup-id rofi -show combi -show-icons

我怎么能韭菜呢?
谢谢你的帮助

i3 exec
  • 2 个回答
  • 3141 Views
Martin Hope
likecs
Asked: 2019-11-27 11:38:50 +0800 CST

Cgroup 内存限制和进程查杀

  • 1

我有以下情况:(以下函数取自python)

我有一个正在运行的进程 A 并设置了 cgroup 内存限制。

我使用 os.fork() 从 A 派生一个子进程。我们称它为 B。然后我执行 os.execvp 在 B 中加载一个 shell 脚本。根据http://www.csl.mtu.edu/cs4411.ck/www/NOTES/process/fork/exec.html这个进程在与调用者(即B)相同的地址空间中运行。

在 B 中运行的 shell 脚本创建了一个 Java 程序,该程序无限期地以给定的堆大小运行并在 OOM 上自动终止。这是通过将-XX:OnOutOfMemoryError='kill -9 %p'传递给 java 命令来实现的。这将创建另一个进程 C 作为 B 的子进程。

从顶部看,我看到 B 是 A 的孩子,C 是 B 的孩子,正如预期的那样。

下面是疑惑:

  1. cgroup 限制是否仅适用于 A 或 (A+B) 或 (A+B+C)?

  2. 如果达到内存限制,将杀死所有进程:A 还是 (A+B) 还是 (A+B+C)?为什么?它是使用进程 pid 或应用限制的进程的地址空间来识别的吗?

  3. 如果在上述情况下,并非所有进程都被杀死,是否有办法微调 cgroup 设置以杀死所有子进程,因为在这种情况下我们会留下孤立的进程?

我正在使用 Centos7 作为底层操作系统。

cgroups exec
  • 1 个回答
  • 5031 Views
Martin Hope
Redirect
Asked: 2019-05-05 11:12:13 +0800 CST

运行 exec 有什么作用吗?

  • 2

exec在交互式 shell 中运行有什么作用吗?我的意思很简单exec,没有任何参数。

在脚本中呢?

如果它确实做某事,它会做什么?

exec
  • 2 个回答
  • 288 Views
Martin Hope
Tim
Asked: 2019-01-26 20:56:48 +0800 CST

使用 exec 3> 保持命名管道打开

  • 7

当写入管道的进程完成写入(发送 EOF)时,从命名管道读取的进程通常会终止。在某些情况下,您可能有不同的进程间歇性地写入管道,并希望单个进程连续从管道中读取。为此,您可以设置一个“虚拟”编写器来打开管道但不写入:

$ mkfifo myPipe
$ cat > myPipe &

虚拟编写器保持命名管道打开 - 无需向其中输入数据或关闭。因此,读取器进程能够接收来自所有(其他)合法写入器的输入,而无需终止并且必须重新启动。

我见过一些人使用exec 3>而不是cat作为保持命名管道打开的一种方式。

$ mkfifo myPipe
$ cat < myPipe &
[1] 10796
$ exec 3> myPipe
$ echo "blah" > myPipe
blah

这种方法似乎有效,而且您无需担心(或清理)后台的虚拟作家,因此我喜欢它。问题是我真的不明白。

如何exec 3>在没有要执行的实际文件或可见(后台)进程的情况下完成保持命名管道打开的任务,这种方法有什么缺点吗?

(我知道它最终必须打开命名管道的输入文件描述符以进行写入,所以我对这exec 3部分exec 3>正在做什么特别感兴趣。)

fifo exec
  • 1 个回答
  • 4503 Views
Martin Hope
Ponzio Pilato
Asked: 2019-01-22 05:45:08 +0800 CST

如何根据 `find` 输出删除目录:仅第一个结果

  • 0

基于这个问题,

如何根据`find`输出删除目录?

我试图只删除结果的第一个文件夹:

find * -type d | head -n1 | -exec rm -rf {} \;

但我收到此错误:

bash: -exec: command not found

怎么了?

find exec
  • 4 个回答
  • 345 Views
Martin Hope
ctrl-alt-delor
Asked: 2019-01-11 03:20:27 +0800 CST

Linux 内核是否支持 PARTIAL exec

  • -2

我正在查看另一个问题(https://stackoverflow.com/q/47845/537980),并看到了一个答案,即对于每个 Process Create,这个其他操作系统必须做多少设置。

我想知道。是否可以进行设置(一次,然后分叉),然后执行部分执行来加载可变部分?那只是应该更换过程的一部分。

部分的一个具体例子是。我们要加载一些执行环境,然后 exec 替换加载器,而不是环境。因此,这是控制被替换的内容(我知道 exec 不会替换所有内容(例如,它保留文件描述符表的 COW))。

我意识到这可能没有任何实际用途,因为fork并且exec在许多 Unix 上相对便宜。

exec
  • 2 个回答
  • 102 Views
Martin Hope
Tim
Asked: 2018-11-29 10:31:23 +0800 CST

`execve()` 的 `argv [0]` 是否需要与 `pathname` 参数的基本名称组件相同?

  • 0

在

#include <unistd.h>
int execve(const char * pathname , char *const  argv [], char *const  envp []);

argv [0]ofexecve对应argv[0]于新程序的 main 函数,因此通常与pathname参数的 basename 组件相同。这是我们应该始终遵循的要求吗?

当程序文件可以由不同的值调用时argv[0],该规则/约定是否意味着当我调用程序文件并希望argv[0]它main()具有特定值时,我必须创建指向以值命名的程序文件的符号链接argv[0],并通过符号链接调用程序?或者不一定?例如,这个回答“为什么 argv 包含程序名称?” 说

argv[0]当is时,Bash 在 POSIX 模式下运行sh。argv[0]它以 .开头时作为登录 shell 运行-。

这是否意味着

  • 要在 POSIX 模式下调用 bash,我必须创建一个符号链接并通过指向字符串/path/to/sh来/bin/bash调用 bash ?这种方式比指向字符串的位置更可取吗?execve("/path/to/sh", argv, ...)argv[0]"sh"execve("/bin/bash", argv, ...)argv[1]"--posix"argv[0]

  • 要将 bash 作为登录 shell 调用,我必须创建一个符号链接并通过指向字符串/path/to/-来/bin/bash调用 bash ?这种方式比指向字符串的位置更可取吗?execve("/path/to/-", argv, ...)argv[0]"-"execve("/bin/bash", argv, ...)argv[1]"--login"argv[0]

argv [0]of与参数的基本名称组件execve 不同时有用吗?pathname

bash exec
  • 1 个回答
  • 891 Views
Martin Hope
Hari Sundararajan
Asked: 2018-10-19 03:28:40 +0800 CST

bash - 使用环境变量对文件描述符使用 exec

  • 0
LOCK_FD=200
LOCK_FILE=/tmp/lock-file
exec ${LOCK_FD}>${LOCK_FILE}

我收到一个错误

exec: 200 not found

然而,这有效

LOCK_FD=200
LOCK_FILE=/tmp/lock-file
eval "exec ${LOCK_FD}>${LOCK_FILE}"

知道为什么吗?

bash exec
  • 1 个回答
  • 615 Views
Martin Hope
Gavriel
Asked: 2018-10-18 02:45:01 +0800 CST

在 bash 中同时使用 trap 和 exec 将输出重定向到 tee

  • 2

我有从文件中读取行的脚本,处理每一行。我希望能够以某种方式进行一些“后处理”,即使脚本没有完成读取所有行,因为我按下了 Ctrl+C,它仍然会进行后处理。为了实现这一点,我正在尝试执行以下两项操作:

  1. 将标准输出重定向到文件;稍后从该文件进行后处理,但是我想看看发生了什么,所以我想重定向到“tee”
  2. 捕获 Ctrl+C 并在那里进行后期处理

我设法使 1 或 2 工作,但不能同时工作:

#!/bin/bash

# 2. Either this works 
# trap ctrl-c and call ctrl_c()
trap ctrl_c INT
function ctrl_c() {
    echo "** Trapped CTRL-C"
}

# 1. Or this works    
LOGFILE=/tmp/${FILE}.tee
rm ${LOGFILE}
exec > >(tee ${LOGFILE}) 2>&1

function post_process() {
    # use ${LOGFILE}
}

egrep "(${URL_PATH})" ${FILE} |
    while read LINE ; do
        #...
    done

post_process
bash exec
  • 1 个回答
  • 1147 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve