# file /sbin/* | grep symbolic | grep systemctl /sbin/halt: symbolic link to ../bin/systemctl /sbin/poweroff: symbolic link to ../bin/systemctl /sbin/reboot: symbolic link to ../bin/systemctl /sbin/runlevel: symbolic link to ../bin/systemctl /sbin/shutdown: symbolic link to ../bin/systemctl /sbin/telinit: symbolic link to ../bin/systemctl
那 systemctl 是如何区分出这些命令的?
熟悉 C 编程的同学大概率可以猜到了,systemctl 可能是通过进程名来区分的,也就是 argv[0] 这个参数,C 语言里 argv[0] 保存的是程序的名称(其他语言也有类似的参数)。
那拿 systemctl 测试一下?
[root@cs8 ~]# ln -sf /usr/bin/systemctl testcmd [root@cs8 ~]# ./testcmd UNIT LOAD ACTIVE SUB DESCRIPTION proc-sys-fs-binfmt_misc.automount loaded active waiting Arbitrary Executable File Formats File System Automount Point sys-devices-pci0000:00-0000:00:05.0-virtio0-net-eth0.device loaded active plugged Virtio network device sys-devices-pci0000:00-0000:00:06.0-virtio1-block-vda-vda1.device loaded active plugged /sys/devices/pci0000:00/0000:00:06.0/virtio1/block/vda/vda1 sys-devices-pci0000:00-0000:00:06.0-virtio1-block-vda.device loaded active plugged /sys/devices/pci0000:00/0000:00:06.0/virtio1/block/vda