标签: spawn

在 bash 脚本中保持 SSH 开放

在任何人说使用公钥之前,这不是一个选项,因为我正在与客户服务器打交道。

我有一个脚本来维护一个文件,其中包含我客户服务器的所有 IP/用户名/密码。通过脚本,我选择了一个服务器并使用 here 文档来登录该服务器。

#### Code up here to set the variables.
exp_internal 1
/usr/bin/expect << EOFFF

if { $USE_TUNNEL == 1 } {
        spawn ssh -L 4567:localhost:3306 $user\@$ip
} else {
        spawn ssh $user\@$ip
}
expect {
    -re ".*es.*o.*" {
        exp_send "yes\r"
        exp_continue
    }
    -re ".*sword.*" {
        exp_send "$pass\r"
    }
}
expect {
    "$ " { send "<<<Send stuff>>>" }
    "# " { send "<<<Send stuff>>>" }
}
interact
EOFFF
# End of bash script
Run Code Online (Sandbox Code Playgroud)

我的问题是,在 here 文档结束后,它会关闭 …

ssh bash heredoc expect spawn

2
推荐指数
1
解决办法
1273
查看次数

Node.js 通过spawn() 调用bash 脚本:ENOENT

这将引发 ENOENT 错误:

const cmd = 'bash my/path/to/script.sh';
const process = spawn(cmd);
process.on('exit', (code) => {
    console.log("Child exited");
});
Run Code Online (Sandbox Code Playgroud)

虽然这不会并按预期执行脚本:

const cmd = 'bash my/path/to/script.sh';
exec(cmd, function(err, stdout, stderr) {
    console.log(stdout);
});
Run Code Online (Sandbox Code Playgroud)

现在,我想获取数据流spawn()并使其正常工作。这种行为可能来自哪里有什么建议吗?

我检查了一下pwd,两者的当前工作目录是相同的。

javascript exec spawn child-process node.js

2
推荐指数
1
解决办法
6045
查看次数

Option&lt;Receiver&gt; 在上一个循环迭代中移动

我正在生成一个线程来做一些工作。有时我希望这个线程在工作完成后死亡,其他时候我希望它等待更多的工作去做。为此,我传入了一个Option<Receiver<T>>. 如果Option<Receiver<T>>None线程应该死,否则就应该等待接收更多的工作。

fn foo(rx: Option<Receiver<usize>>) {
    thread::spawn(move || {
        loop {
            do_some_work();
            if let Some(r) = rx {
                match r.recv() {
                    Ok(x)  => {}
                    Err(_) => panic!("Oh no!"),
                }
            } else {
                break; //Die
            }
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

链接到操场

编译器说:

fn foo(rx: Option<Receiver<usize>>) {
    thread::spawn(move || {
        loop {
            do_some_work();
            if let Some(r) = rx {
                match r.recv() {
                    Ok(x)  => {}
                    Err(_) => panic!("Oh no!"),
                }
            } else {
                break; //Die …
Run Code Online (Sandbox Code Playgroud)

spawn receiver rust borrow-checker

2
推荐指数
1
解决办法
1005
查看次数

Node 生成的子进程何时真正启动?

Node 的 Child Process spawn()function的文档以及我在其他地方看到的示例中,模式是调用该spawn()函数,然后返回的对象上设置一堆处理程序ChildProcess。例如,这是spawn()该文档页面上给出的第一个示例:

const { spawn } = require('child_process');
const ls = spawn('ls', ['-lh', '/usr']);

ls.stdout.on('data', (data) => {
  console.log(`stdout: ${data}`);
});

ls.stderr.on('data', (data) => {
  console.error(`stderr: ${data}`);
});

ls.on('close', (code) => {
  console.log(`child process exited with code ${code}`);
});
Run Code Online (Sandbox Code Playgroud)

spawn()函数本身在第二行调用。我的理解是spawn()异步启动子进程。从文档中:

child_process.spawn() 方法使用给定命令生成一个新进程,并在 args 中使用命令行参数。

然而,上面脚本的以下几行继续为该进程设置各种处理程序,因此假设在spawn()第 2 行调用时间和其他事情发生之间该进程尚未实际启动(并且可能完成)随后的几行。我知道 JavaScript/Node 是单线程的。然而,操作系统不是单线程的,天真地人们会认为该spawn()调用是告诉操作系统立即生成进程(此时,不幸的是,操作系统可能会挂起父 Node 进程并运行/完成执行下一行 Node 代码之前的子进程)。

但一定是在当前 JavaScript 函数完成(或者更一般地说,调用当前函数的当前 JavaScript 事件处理程序完成)之前,该进程实际上不会生成,对吧? …

asynchronous spawn node.js

2
推荐指数
1
解决办法
1389
查看次数

节点生成子进程在 Windows 中不起作用

我有一个在 Windows 上使用 spawn 的简单脚本设置,其输​​出是:

spawn error: Error: spawn dir ENOENT
spawn child process closed with code -4058
Run Code Online (Sandbox Code Playgroud)

这是代码:

const spawn = require('child_process').spawn;

const spawnTest = (() => {
  const dir = spawn('dir');

  dir.stdout.on('data', (data) => {
    console.log(`spawn stdout: ${data}`);
  });

  dir.stderr.on('data', (data) => {
    console.log(`spawn stderr: ${data}`);
  });

  dir.on('error', (code) => {
    console.log(`spawn error: ${code}`);
  });

  dir.on('close', (code) => {
    console.log(`spawn child process closed with code ${code}`);
  });

  dir.on('exit', (code) => {
    console.log(`spawn child process exited with code ${code}`); …
Run Code Online (Sandbox Code Playgroud)

windows spawn node.js

2
推荐指数
1
解决办法
5094
查看次数

为什么这个 Elixir 脚本在完成其工作之前就退出了?

我在 Elixir 脚本中编写了一个模块 SC wget.exs,. 该模块SC 利用 Erlang 的操作系统模块来执行复杂的命令并将其输出打印在屏幕上。我在脚本中使用该模块一次下载多个包wget

\n
#!/usr/bin/env elixir\n\ndefmodule SC do\n  def run(cmmnd) do\n    output = :os.cmd(String.to_charlist(cmmnd))    \n    IO.puts output\n  end\nend\n\ndefmodule Downloader do\n  def download_packages do\n    lst_f_pckgs = "wget-list-sysv"\n\n    #System.cmd("wget", ["https://www.linuxfromscratch.org/lfs/view/stable/#{lst_f_pckgs}"])\n    SC.run("wget -c https://www.linuxfromscratch.org/lfs/view/stable/#{lst_f_pckgs}")\n    \n    {:ok, file_content} = File.read(lst_f_pckgs)\n    arr_f_pckgs = String.split(file_content, ~r/\\s+/)\n\n    tasks =\n      arr_f_pckgs\n      |> Enum.map(fn l ->\n        #Task.async(fn -> System.cmd("wget", [l]) end)\n        Task.async(fn -> SC.run("wget -c #{l}") end)\n      end)\n\n    tasks\n    |> Enum.each(&Task.await/1)\n\n    IO.puts "All of them are downloaded."\n …
Run Code Online (Sandbox Code Playgroud)

concurrency erlang elixir spawn

2
推荐指数
1
解决办法
67
查看次数

从servlet生成线程?

我有一个servlet,它调用一个Web服务,并获取数据来填充servlet响应.我也不想等太久.我可以生成一个新线程并调用Web服务吗?如果不推荐这样做,有什么更好的方法?

谢谢

java multithreading servlets spawn

1
推荐指数
1
解决办法
439
查看次数

如何从bash以root身份登录并执行操作

这是我简单的bash:

cat test.sh

#!/bin/bash 
echo "hello"
su - root -c /path/to/script.sh <<EOF
password                              
EOF
whoami
echo "good bye"
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

./test.sh
hello
su: must be run from a terminal
<current-user>
good bye
Run Code Online (Sandbox Code Playgroud)

(要么)

cat test2.sh
#!/bin/bash 
echo "hello"
sudo su <<EOF
password                              
EOF
whoami
echo "good bye"
Run Code Online (Sandbox Code Playgroud)

又一次错误

(要么)

cat test3.sh
#!/bin/bash 
echo "hello"
su root <<EOF
password                              
EOF
whoami
echo "good bye"
Run Code Online (Sandbox Code Playgroud)

再次出错......

当我尝试:

#!/bin/bash
echo "hello"
sudo -s <<EOF
<password>
echo Now I am root
id                                                                      
echo "yes!"
EOF …
Run Code Online (Sandbox Code Playgroud)

linux bash logging heredoc spawn

1
推荐指数
1
解决办法
2385
查看次数

在Fortran中生成进程

如何在Fortran中启动子进程(例如执行shell命令)?

在Node.js的,我们可以使用spawnexec启动子进程:

var proc = require("child_process").spawn("ls", ["-l"]);
proc.stdout.on("data", function (chunk) {
  console.log(chunk);
});

// or

var proc = require("child_process").exec("ls -l"], function (err, stdout, stderr) {
   ...
});
Run Code Online (Sandbox Code Playgroud)

上面的两个例子都运行ls -l(列出文件和目录).如何在Fortran中实现同样的目标?

fortran spawn child-process node.js

1
推荐指数
1
解决办法
193
查看次数

简单的代码在C崩溃中产生进程.为什么?

以下程序崩溃.我究竟做错了什么?

#include <stdio.h>
#include <process.h>

int main() {
    puts("Hello!");
    return spawnlp(0, "notepad.exe", "notepad.exe", "test.txt");
}
Run Code Online (Sandbox Code Playgroud)

c windows spawn

1
推荐指数
1
解决办法
50
查看次数