- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在服务器上安装了 Ubuntu 12.04。每个注册用户也被注册为 linux 用户,并通过/etc/security/limits.conf 被限制访问系统资源。
我尝试以注册用户之一的身份运行服务器。该应用程序是一个 nodejs 应用程序 - http://github.com/pocha/terminal-codelearn .它使用 https://github.com/chjj/pty.js为每个使用 nodejs 应用程序的用户创建一个伪终端。
应用程序失败,“forkpty(3) 失败”错误指向 https://github.com/chjj/pty.js/blob/65dd89fd8f87de914ff1814362918d7bd87c9cbf/src/unix/pty.cc 的第 184 行
pid_t pid = pty_forkpty(&master, name, NULL, &winp);
if (pid) {
for (i = 0; i < argl; i++) free(argv[i]);
delete[] argv;
for (i = 0; i < envc; i++) free(env[i]);
delete[] env;
free(cwd);
}
switch (pid) {
case -1:
return ThrowException(Exception::Error(
String::New("forkpty(3) failed.")));
我能够在 http://nitrous.io 上成功部署该应用程序.他们可能有类似的方式来监禁用户。我尝试运行 ulimits -a
并匹配除挂起信号之外的每个值。不知何故,在我的服务器上,最大挂起信号值不超过 90k 左右,而在 Nitrous 服务器上为 584k。
下面是 ulimit -a Nitrous 服务器的输出
ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 548288
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 512
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 256
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
该应用程序在 heroku 上失败并出现完全相似的错误。
任何人都可以帮助如何使应用程序像在 nitrous.io 上一样在我的服务器上运行
最佳答案
我知道 heroku 无法 forkpty,因为它们实际上并没有运行 POSIX,只是非常像 posix。所以有些东西,比如 forkpty,就是行不通。我认为没有办法解决这个问题 :( 但愿有。
关于linux - 对于 jailed Linux 用户,forkpty 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17783592/
我正在尝试开发一个简单的“telnet/server”守护进程,它必须在新的套接字连接上运行一个程序。这部分工作正常。 但是我必须将我的新进程关联到一个 pty,因为这个进程有一些终端功能(比如 re
import pty import os import sys import time pid, fd = os.forkpty() if pid == 0: # Slave os.e
我正在尝试为 shell 编写 pty I/O 透明过滤器。 以下示例大部分有效。大多数程序使用包装器按预期运行。这个例子没有做任何过滤,它的目的只是提供一个框架。 编辑:根据我在下面的回答,这个示例
我有一个在 Linux 中开发的 C++ 应用程序。我正在分配一些动态内存并最终调用 forkpty()。子进程正在调用 execl(),正如我们所知,如果成功执行命令,execl() 永远不会返回。
我希望对应用程序进行沙盒处理,以符合 Mac App Store 3 月 1 日的沙盒处理要求。我的应用程序包含一个内置终端仿真器,它利用 forkpty() 调用在伪 tty 环境中启动进程。不幸的
我正在尝试编写一个 python 脚本,它将通过 ssh 自动登录到远程主机并更新用户密码。由于 ssh 要求它从终端获取输入,因此我使用 os.forkpty(),在子进程中运行 ssh 并使用父进
我正在尝试使用forkpty来execvpless分页程序,然后从父进程中写入一些文本,这样子 less 进程将其作为其输入的方式。 我一直在研究如何实现这一点,但我无法使用 forkpty 来实现某
所以我在 Ubuntu 10.04 的 Eclipse 中开发我的项目。我有以下代码行: #include pid_t pid; int master; pid = forkpty(&master,
我有一个 GUI C++ 程序,它从用户那里获取一个 shell 命令,调用 forkpty() 和 execvp() 在子进程中执行该命令,而父 (GUI) 进程读取子进程的标准输出/stderr
我在服务器上安装了 Ubuntu 12.04。每个注册用户也被注册为 linux 用户,并通过/etc/security/limits.conf 被限制访问系统资源。 我尝试以注册用户之一的身份运行服
我正在尝试编写一个 python 脚本,它可以通过 ssh 连接到远程服务器,并可以从 python 客户端执行简单的命令,如 ls、cd。但是,在成功 ssh 进入服务器后,我无法读取伪终端的输出。
当我的程序到达这一行时: pid_t nPid = forkpty( &m_nMasterFD, NULL, NULL, NULL ); 输出这个: X Error: BadIDChoice (inv
我寻找一个实现了 forkpty() 的 GNU Common Lisp 包; openpty() 也将是一个很大的优势,而 login_tty() 将是我可以忍受的奢侈品。 (Duckduckgo、
我正在尝试使用forkpty来execvp一个ls/,然后从父进程读取它的输出并写入stdout . 我让它工作了,并且在 Valgrind 下运行它也没有显示任何错误。 编辑:Valgrind 没有
背景 我目前正在为用 Node.js (Javascript) 编写的文本编辑器编写终端模拟器。该应用程序使用 C++ 派生一个 shell 并在后端与其通信。 fork shell 的代码是由另一个
我有一个使用 forkpty 执行 bash shell 的 C 程序。我发现这个 shell 启动的程序是在忽略 SIGINT 的情况下启动的,所以当我向 shell 发送 Ctrl-C 时,它们永
我无法在 MacOS 10.12 上启动终端 我收到以下消息: [forkpty: Resource temporarily unavailable][Could not create a new p
我是一名优秀的程序员,十分优秀!