Linux - 创建进程

标签 linux shell process ssh ps

<分区>

我是 Linux Shell 的新手,有点卡在任务中: 我们应该使用 ssh 连接到 linux 机器。然后我们应该发出 ls 命令并使用 ps 和 pstree 来查看我们在机器中创建了哪些进程来使 ls 命令起作用。然后我们需要找出这些进程的RUID和EUID。并解释在途中访问了哪些文件以及原因。

我知道网上有很多关于 shell 命令的文档,所以我当然先尝试使用 google 解决问题。我发现了如何使用 ps -ef 列出所有进程,以及如何获取特定进程的 RUID 或 EUID。 但是如何才能看到帮我实现ls命令的进程呢?如果我先执行 ls 然后执行 ps,则 ls 进程已经完成并且唯一事件的进程是 ps 和 ssh 进程... 我也不知道作业中的文件是什么意思。

最佳答案

您必须确保 ls 至少需要一些时间。您可以尝试 ls -R (递归)包含一些数据的目录。一旦找到合适的目录(使用 / 作为最后的手段,但它可能非常长)启动 lsps 通过 sshls 发送到后台:

$ ssh host "ls -R >>/dev/null & pstree -u user" | grep ls
sshd---bash-+-ls

您会看到创建了一个 sshd 进程,以及一个 bash 进程,最后是一个 ls 进程。

寻找EUID和RUID;使用以下构造:

$ ssh host "ls -R >> /dev/null & ps -o ruid,euid -p \$!"
 RUID  EUID
  501   501

注意 $! 返回最后一个命令的 pid(这里是 ls),它需要用 \ 转义,因为我们这样做不希望它在本地计算机上解析,而是在远程计算机上解析。

要查找打开了哪些文件,您可以使用 stracelsof 而不是 ps 的相同构造(留作练习,请参阅man strace, man lsof) 序列中的每个进程 (sshd, bash, ls),也许还有本地 ssh 命令。

关于Linux - 创建进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20166163/

相关文章:

objective-c - 从 Objective-C 运行 shell 脚本

bash - cut -f 参数无法正常工作

Golang - 按名称杀死进程

c++ - 运行时进程内存修补以恢复状态

c - fork 执行顺序

linux - 部署后如何从实例中删除 AWS CodeDeploy bundle.tar

linux - selinux:如何以编程方式记录到审计日志?

linux - 为什么 savepath 在 Matlab 中重置用户路径?

linux - 从 Perl 获取 Shell 脚本

c# - 杀死远程机器上的进程