在我的conda.sh脚本副本中,我看到以下几行:
if [ -n "${_CE_CONDA}" ] && [ -n "${WINDIR+x}" ]; then
SYSP=$(\dirname "${CONDA_EXE}")
else
SYSP=$(\dirname "${CONDA_EXE}")
SYSP=$(\dirname "${SYSP}")
fi
Run Code Online (Sandbox Code Playgroud)
我很好奇,为什么在前面的一个反斜杠d中dirname。我认为没有必要。这种反斜杠的使用也出现在源文件的其他地方。有没有理由这样做我失踪了?
[fakename]$ help time
time: time [-p] pipeline
Report time consumed by pipeline's execution...
Run Code Online (Sandbox Code Playgroud)
由此看来,它似乎time是一个 Bash 内置函数。但是,我在此页面上找不到它的描述:https : //www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html#Shell-Builtin-Commands。为什么会这样?
出于教育目的,我正在查看连接到终端的正在运行的 bash 进程的 strace 输出。
我的 bash 进程的 PID 为 2883。
我打字
[OP@localhost ~]$ strace -e trace=openat,read,write,fork,vfork,clone,execve -p 2883 2> bash.strace
Run Code Online (Sandbox Code Playgroud)
进入一个终端。然后我进入我的 bash 进程,并进行以下交互:
[OP@localhost ~]$ ls
Run Code Online (Sandbox Code Playgroud)
查看输出,我看到
strace: Process 2883 attached
read(0, "l", 1) = 1
write(2, "l", 1) = 1
read(0, "s", 1) = 1
write(2, "s", 1) = 1
read(0, "\r", 1) = 1
write(2, "\n", 1) = 1
clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7fec6b1d8e50) = 3917
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=3917, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
write(1, "\33]0;OP@localhost:~\7", 23) …Run Code Online (Sandbox Code Playgroud) 有没有办法改变正在运行的进程的PID、PPID、SID?答案是否定的是有道理的,但我想确定一下。
例如,
[fakename]$ type echo
echo is a shell builtin
Run Code Online (Sandbox Code Playgroud)
但是man echo给了我 GNU coreutils 版本的echo. 判断我正在查看的手册页是否正确的最简单方法是什么,即如果我直接调用它,我会得到哪个实用程序?
对我来说,uptime产生了 9 个用户,但是
ps -Af | cut -f1 -d' ' | sort | uniq | wc -l产量 14。
我不太确定 9 是从哪里来的。
在我下结论之前,请告诉我你们是否没有这样的差异。
ps(1),使用该-f选项,将输出方括号中没有关联命令行的进程,如下所示:
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Aug28 ? 00:07:42 /sbin/init
root 2 0 0 Aug28 ? 00:00:01 [kthreadd]
root 3 2 0 Aug28 ? 00:00:00 [rcu_gp]
root 4 2 0 Aug28 ? 00:00:00 [rcu_par_gp]
root 6 2 0 Aug28 ? 00:00:00 [kworker/0:0H-kblockd]
root 8 2 0 Aug28 ? 00:00:00 [mm_percpu_wq]
root 9 2 0 Aug28 ? 00:02:14 [ksoftirqd/0]
root 10 2 0 Aug28 ? 00:05:33 [rcu_preempt]
root 11 2 0 …Run Code Online (Sandbox Code Playgroud) 在The Linux Programming Interface一书中,它说
内核对解除引用的数量施加了限制,以处理符号链接循环链的可能性。
我在哪里可以找到这个限制?
例如,如果我这样做
[OP@localhost executable]$ cat garbage
lalala
trololol
[OP@localhost executable]$ chmod +x garbage
[OP@localhost executable]$ ./garbage
./garbage: line 1: lalala: command not found
./garbage: line 2: trololol: command not found
Run Code Online (Sandbox Code Playgroud)
Bash 似乎试图将这个“可执行文件”解释为脚本。但是,有两种情况显然不会发生这种情况:文件以#!, 和 ELF 文件开头。还有吗?某处是否有关于此的全面文档?
bash ×3
man ×2
process ×2
executable ×1
kernel ×1
linux ×1
scheduling ×1
session ×1
shell-script ×1
strace ×1
symlink ×1
time ×1
tty ×1
uptime ×1