如何为同一 shell 脚本的新实例生成新进程?

如何为同一 shell 脚本的新实例生成新进程?

我正在尝试使用命令 lock 锁定文件。它的语法是

./lock </path/to/file/name>

我需要锁定给定目录中的一堆文件,为了实现此目的,我使用两个脚本:

  1. parent.sh
  2. child.sh

parent.shchild.sh将为每个文件调用一个进程。因此,如果我需要锁定 9 个文件,我将parent.sh生成 9 个文件child.sh,但不幸的是这没有发生。

[root@localhost /]# cat parent.sh
#!/bin/ksh
for f in /vol4/commit/file[1-9]
do
 sh /child.sh & $f
done

[root@localhost /]# cat child.sh
#!/bin/ksh
./lock $1

当我运行时sh parent.sh,出现以下错误

[root@localhost /]# sh parent.sh
parent.sh: line 4: /vol4/commit/file1: Permission denied
parent.sh: line 4: /vol4/commit/file2: Permission denied
parent.sh: line 4: /vol4/commit/file3: Permission denied
parent.sh: line 4: /vol4/commit/file4: Permission denied
parent.sh: line 4: /vol4/commit/file5: Permission denied
parent.sh: line 4: /vol4/commit/file6: Permission denied
parent.sh: line 4: /vol4/commit/file7: Permission denied
parent.sh: line 4: /vol4/commit/file8: Permission denied
parent.sh: line 4: /vol4/commit/file9: Permission denied

由于我以 root 身份运行,所以我没想到这里会出现任何权限问题,但这就是我所看到的。

答案1

第 4 行parent.sh,你写的sh /child.sh & $f。必须将 & 符号放在命令末尾,如下所示:sh /child.sh $f &

在您的情况下,您尝试sh /child.sh在后台运行,然后在前台执行$f,这将导致权限被拒绝,因为我可以假设您的文件/vol4/commit/file[1-9]不可执行。

另外,您可能需要注意,如果您的文件处于只读状态,您可能无法编辑它或获取写锁定,即使对于 root 也是如此。

相关内容