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 / 问题

问题[background-process](unix)

Martin Hope
Greendrake
Asked: 2022-06-18 00:48:54 +0800 CST

如何将heredoc命令发送到后台?

  • 1

我想发送一个这样的heredoc命令

cat <<EOF
line 1
line 2
EOF

背景。(实际的命令openssl包含多行输入,需要一些时间才能完成)。

该命令需要以字符串形式存储,以便我可以exec在 PHP 中使用它。

简单地附加一个 & 号是行不通的:

cat <<EOF
line 1
line 2
EOF &

我尝试过的任何其他组合(将命令放在括号中等)也不起作用。

如何?

shell background-process
  • 1 个回答
  • 58 Views
Martin Hope
hal
Asked: 2022-05-10 06:46:52 +0800 CST

如何列出所有后台进程?

  • 0

是否可以使用命令列出所有正在运行的后台进程ps,或者是获取后台进程列表的唯一选项jobs?

background-process ps
  • 2 个回答
  • 6690 Views
Martin Hope
ZioByte
Asked: 2022-05-03 06:28:35 +0800 CST

如何确保用户进程在注销时被杀死?

  • 0

我在我的服务器(以及所有 debian 衍生服务器)上出现注销问题,但不会杀死所有用户进程。

我似乎理解这是出于工作站效率的原因(假设似乎是同一用户将在此后不久登录)。

例如,在一个非常受限的帐户上,我得到:

mcon@cinderella:~$ pgrep --list-full -U gamer
3001599 /lib/systemd/systemd --user
3001600 (sd-pam)
3001615 /usr/bin/pipewire
3001616 /usr/bin/pipewire-media-session
3001624 /usr/bin/dbus-daemon --session --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
3001706 /usr/libexec/gvfsd
3001711 /usr/libexec/gvfsd-fuse /run/user/1002/gvfs -f
3001839 /usr/libexec/dconf-service
3001841 /usr/libexec/gvfs-udisks2-volume-monitor
3001852 /usr/libexec/gvfs-gphoto2-volume-monitor
3001860 /usr/libexec/gvfs-goa-volume-monitor
3001888 /usr/libexec/goa-daemon
3001906 /usr/libexec/goa-identity-service
3001908 /usr/libexec/gvfs-mtp-volume-monitor
3001915 /usr/libexec/gvfs-afc-volume-monitor
3002093 /usr/libexec/evolution-source-registry
3002108 /usr/libexec/gvfsd-trash --spawner :1.9 /org/gtk/gvfs/exec_spaw/0
3002112 /usr/libexec/xdg-desktop-portal
3002120 /usr/libexec/xdg-document-portal
3002124 /usr/libexec/xdg-permission-store
3002132 fusermount3 -o rw,nosuid,nodev,fsname=portal,auto_unmount,subtype=portal -- /run/user/1002/doc
3002150 /usr/libexec/evolution-calendar-factory
3002162 /usr/libexec/gvfsd-metadata
3002176 /usr/libexec/evolution-addressbook-factory
3002227 /usr/libexec/bluetooth/obexd
3002924 /usr/bin/python3 /usr/share/system-config-printer/applet.py
3827100 /usr/bin/gnome-keyring-daemon --start --foreground --components=secrets

gamer这是在用户注销和其他用户(包括我自己)使用系统之后花费了(很多)小时。

我见过这个问题,但这不适用于我的情况:我不想阻止用户通过nohupor显式启动长时间运行的进程screen,而只是杀死所有“无用”的系统任务。

我尝试设置[Login]-> KillUserProcesses=yesin/etc/systemd/logind.conf但显然没有任何改变。

请注意,对于曾经登录的每个用户,所有这些进程都保持活动状态(当然,自上次重新启动以来)。

我如何摆脱所有这些过程?真的需要运行一些cron脚本来杀死它们吗?如果是这样:我如何将“明确需要”的后台进程与系统垃圾分开?

PS:我知道 StackExchange 政策是“每个 OP 一个问号”,但这些实际上是同一个问题的各个方面。

debian background-process
  • 1 个回答
  • 186 Views
Martin Hope
John Smith
Asked: 2022-02-28 21:36:37 +0800 CST

'cmd1 [newline] cmd2' 是否与 Bash 脚本中的 'cmd1 & cmd2' 一样并发?

  • 0

执行以下脚本

#!/usr/bin/bash

while true
do
  ab -c 700 -n 100000000000 -r http://crimea-post.ru/ >>crimea-post & ab -c 700 -n 100000000000 -r http://nalog.gov.ru/ >>nalog
done

做完全一样的

#!/usr/bin/bash

while true
do
  ab -c 700 -n 100000000000 -r http://crimea-post.ru/ >>crimea-post 
  ab -c 700 -n 100000000000 -r http://nalog.gov.ru/ >>nalog
done

根据我的经验,第一个脚本比第二个脚本(超过 10 分钟后)更快地创建nalog文件(几秒钟内),这向我表明后者等待ab -c 700 -n 100000000000 -r http://nalog.gov.ru/ >>nalog完成。它不应该是这样的,因为从我到目前为止的研究来看,第二个脚本是在ab -c 700 -n 100000000000 -r http://nalog.gov.ru/ >>nalog不等待ab -c 700 -n 100000000000 -r http://crimea-post.ru/ >>crimea-post完成的情况下开始的。我希望这两个ab命令同时执行,我如何在 Bash 中完成这个?

PS它是&和不是&&。我知道什么&&可以和不想在这里应用它。

bash background-process
  • 1 个回答
  • 71 Views
Martin Hope
Asmodean
Asked: 2022-02-09 12:53:04 +0800 CST

锁定 gnome 是否允许上传等后台任务继续运行?

  • 0

我在后面上传东西并想锁定屏幕,但不确定lockgnome 中的功能是否会在允许继续的同时锁定屏幕。

到目前为止,计算机似乎没有进入休眠状态,这很好,但它会一直这样吗?我不想让它进入睡眠状态。

gnome background-process
  • 1 个回答
  • 205 Views
Martin Hope
PersianGulf
Asked: 2022-01-12 05:37:30 +0800 CST

运行守护进程并运行下一个进程

  • 0

我有一个 shell 脚本,它有 3 个程序:

#!/bin/bash
x
y
z

以上每个程序都是二进制的,必须按顺序运行。程序y是一个守护进程。当 bash 运行时x,它是好的,当y运行时,z不能运行。我运行 y 等nohup y &但z无法运行。

我怎样才能在诸如非阻塞编程z之后运行?y

process background-process
  • 1 个回答
  • 79 Views
Martin Hope
sedwho
Asked: 2021-12-31 13:20:17 +0800 CST

调试一个立即失败/从未出现的子进程

  • 0

我有一个可执行的二进制文件(它是一个设备驱动程序)。它运行并立即以成功的 0 返回码退出。在一台计算机上,它创建了我可以用 pgrep 看到的所有重要的子进程,但遗憾的是在我的另一台计算机上没有。运行它的输出strace结束:

clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f2851597310) = 32167
exit_group(0)                           = ?
+++ exited with 0 +++

但是在那台计算机上找不到进程(在本例中为 32167)。

我不知道如何弄清楚出了什么问题。sudo execsnoop -x跑步对孩子没有任何影响。源代码不可用。(不是主要目标,但如果它不克隆而只是在前台运行所有内容,那就太好了。)如果有帮助,就是这个文件:https ://github.com/elmadjian/tobii_4C_for_linux/blob/main/tobii_usb_service /usr/local/sbin/tobiiusbserviced

编辑:strace -f command输出结束:

23747 clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f789577f310) = 23748
23747 exit_group(0)                     = ?
23748 umask(000)                        = 022
23748 setsid( <unfinished ...>
23747 +++ exited with 0 +++
23748 <... setsid resumed>)             = 23748
23748 brk(NULL)                         = 0x21bd000
23748 brk(0x21de000)                    = 0x21de000
23748 openat(AT_FDCWD, "/var/run/tobiiusb/tobiiusbservice.pid", O_WRONLY|O_CREAT|O_TRUNC, 0666) = -1 ENOENT (No such file or directory)
23748 openat(AT_FDCWD, "/etc/localtime", O_RDONLY|O_CLOEXEC) = 3
23748 fstat(3, {st_mode=S_IFREG|0644, st_size=3648, ...}) = 0
23748 fstat(3, {st_mode=S_IFREG|0644, st_size=3648, ...}) = 0
23748 read(3, "TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\0\0\0\7\0\0\0\0"..., 4096) = 3648
23748 lseek(3, -2321, SEEK_CUR)         = 1327
23748 read(3, "TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\0\0\0\7\0\0\0\0"..., 4096) = 2321
23748 close(3)                          = 0
23748 socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0) = 3
23748 connect(3, {sa_family=AF_UNIX, sun_path="/dev/log"}, 110) = -1 ENOENT (No such file or directory)
23748 close(3)                          = 0
23748 exit_group(1)                     = ?
23748 +++ exited with 1 +++
process background-process
  • 1 个回答
  • 79 Views
Martin Hope
emike
Asked: 2021-12-02 08:28:57 +0800 CST

获取管道后台进程PID的可靠方法

  • 2

我需要检索通过管道传输到另一个进程的进程的 PID,这些进程一起作为 bash 中的后台作业生成。以前我只是依靠pgrep,但事实证明在pgrep能够找到该过程之前可能会有> 2s的延迟:

#!/bin/bash
cmd1 | cmd2 &
pid=$(pgrep cmd1) # emtpy in about 1/10

我发现针对这个问题的一些常见建议是使用进程替换而不是简单的管道 ( cmd1 >(cmd2) & pid=$!) 或使用jobs内置函数。进程替换运行整个子shell(对于整个运行时),所以我现在宁愿使用jobs,但我想避免两次犯同样的错误......

jobs如果我在生成它们后立即执行查找,我可以 100% 依赖于了解这两个进程吗?

#!/bin/bash
cmd1 | cmd2 &
pid=$(jobs -p %cmd1) # 10/10?

这可能是由于在后台运行作业,或者可能是一个怪癖set -x,但以下示例通常以任何顺序列出执行的命令。到目前为止,输出似乎是正确的,但我想完全排除在jobs作业开始之前jobs可以执行的可能性(或者至少不会列出两个进程)!?jobs

#!/bin/bash
set -x
tail -f /dev/null | cat &
jobs -l
kill %tail

例子:

+ jobs -l
[1]+ 2802325 Running                 tail -f /dev/null
     2802326                       | cat &
+ tail -f /dev/null
+ kill %tail

同样,在流程替换的情况下,我可以依靠pid=$!始终工作吗?它到底是为了“扩展到最近执行的后台(异步)命令的进程ID”而设计的?

bash background-process
  • 1 个回答
  • 544 Views
Martin Hope
ridgek
Asked: 2021-10-18 14:03:59 +0800 CST

使用 read 和whiptail 运行脚本后终端上没有键盘输出

  • 2

我编写了一个 bash 函数,它接受命令作为参数,在后台运行它,并允许用户通过按任意键来终止命令。这部分工作正常。

但是,当我将它通过管道传输到whiptail对话框仪表时,whiptail 按预期运行,但在它返回后,终端将不再显示按键。我仍然可以运行命令,只是看不到我正在输入的内容打印到屏幕上。输出的格式也很奇怪,stdout 出现在$.

我很确定该read命令是造成这种行为的原因,但我不明白为什么。任何人都可以提供任何见解吗?

#!/bin/bash
function killOnKeypress() {
    local runcommand="${1}"
    local args=(${@:2})

    # Run the command in the background
    "${runcommand}" ${args[@]} &

    # Get the process id of $runcommand
    local pid=$!

    # Monitor $runcommand and listen for keypress in foreground
    while kill -0 "${pid}" >/dev/null 2>&1; do
        # If key pressed, kill $runcommand and return with code 1
        read -sr -n 1 -t 1 && kill "${pid}" && return 1
    done

    # Set $? to return code of $runcommand
    wait $pid

    # Return $runcommand's exit code
    return $?
}

function count100() {
    for ((i = 0; i < 100; i++)); do
        echo $i
        sleep .02
    done
}

killOnKeypress "count100" | whiptail \
    --gauge "Counting to 100" \
    16 56 \
    0

在此处输入图像描述

bash background-process
  • 2 个回答
  • 177 Views
Martin Hope
sudoScience
Asked: 2021-10-14 20:41:44 +0800 CST

薛定谔的猫

  • 0

当我将 cat 命令作为后台进程运行时,

$ cat &

然后尝试杀死它,

$ killall -v cat

它说它用信号 15 杀死了猫,但这只猫只是被停止了。运行后$ ps,我看到它仍在运行。直到我打电话$ fg,它才最终被终止。

好像和等待输入有关,因为在c++中模拟cat的时候,

string line;
while(getline(cin, line))
   cout << line << endl;

同样的事情发生了,但是对于一个简单的while(true);循环,该进程被成功杀死。

它似乎也是一个后台进程,因为当我$ cat在另一个终端运行时$ killall -v cat它也可以正常工作。

这里发生了什么?提前致谢。

background-process cat
  • 1 个回答
  • 66 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