【问题标题】:UNIX -killing pid and passing argument in kshUNIX - 杀死 pid 并在 ksh 中传递参数
【发布时间】:2014-01-14 03:09:54
【问题描述】:

我是 UNIX 新手。我想杀死文件“File_name”的 pid,然后我必须运行“Recycle_All”脚本,该脚本默认采用参数“y”。

#!/bin/ksh
ps -aef | grep "File_name" | awk '{print $2}' | xargs kill -9
/directory>./Recycle y
exit

我无法将“y”作为参数传递。 另外我应该如何验证 pids 是否已被上述命令杀死。

错误是:

用法:kill [ -signo ] pid ... ./soap_rec.ksh[x]: ./Recycle_All: 无法创建

【问题讨论】:

  • 在传递参数时,它会显示任何错误或警告消息。如果您在脚本中使用$1 来检查第一个参数。
  • 我建议您过滤掉 grep 进程本身,例如:ps -aef | grep "File_name" | grep -v grep | awk ...。您可以使用ps -p PID 检查pid 是否存在。
  • 查看killall 命令,它可以将进程名称作为参数。比ps | grep 简单得多。此外,yes 命令可用于将y 传送到进程(如果它不支持适当的命令)。
  • 为什么会出现这个错误?
  • 您的 Unix 发行版上是否安装了 pkill?是的话就去看看吧。

标签: shell unix scripting ksh kill


【解决方案1】:

注意:通过说 *pid of file "File_name"* 我猜你的意思是*在它的参数列表中具有 "File_name" 的进程的 pid*

首先,您应该删除脚本最后一行的虚假“/directory>”前缀(您打算对此做什么?)

第一行最好写成:

  • 如果你没有“pkill”命令:

    ps -aef | awk '/File_name/ && ! /awk/ {system("kill -9 " $2)}' 
    
  • 如果有的话:

    pkill -9 -f "File_name"
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    相关资源
    最近更新 更多