【发布时间】:2014-05-04 01:25:55
【问题描述】:
以下是我的脚本,当我试图杀死一个进程时,我得到了一个错误。错误表明进程不存在:
select case when max(LAST_MODIFIED_DATE) > to_date('$TO_EXTRACT_VALUE', 'YYYY-MM-DD HH24:MI:SS') then 0
else 1
end
from $ORACLE_TABLE;" > $SQL_TMP_FILE
PID=$(ps -ef | grep sqlplus | head -1 | awk '{print $2}')
print $PID
sleep 10 > $SQL_TMP_FILE
kill -9 $PID > $SQL_TMP_FILE
#echo "FILE_ID: $FILE_ID"
check_result=$(sqlplus -S ${ORA_USERNAME}/${ORA_PASSWORD}@$TNS_NAME < $SQL_TMP_FILE)
下面也是调试后的输出:
select case when max(LAST_MODIFIED_DATE) > to_date('2014-03-25 00:00:00', 'YYYY-MM-DD HH24:MI:SS') then 0
else 1
end
from SHIPPING_TRANSACTION;
+ 1> /dw/etl/home/dev/tmp/extract/dw_da/check_shplx_stby_sync.dw_shpmt.ssa_shpmt_trans_fact_shpmt_trans.tmpfile
+ + ps -ef
+ grep sqlplus
+ head -1
+ awk {print $2}
PID=2303
+ print 2303
2303
+ sleep 10
+ 1> /dw/etl/home/dev/tmp/extract/dw_da/check_shplx_stby_sync.dw_shpmt.ssa_shpmt_trans_fact_shpmt_trans.tmpfile
+ kill -9 2303
+ 1> /dw/etl/home/dev/tmp/extract/dw_da/check_shplx_stby_sync.dw_shpmt.ssa_shpmt_trans_fact_shpmt_trans.tmpfile
kill: 2303: no such process
谁能帮我解决这个问题
【问题讨论】:
-
你怎么知道
grep sqlplus没有返回grep sqlplus命令的PID?毕竟,它确实包含sqlplus,这就解释了为什么它在 10 秒后仍然没有运行。 -
如果你想避免这种情况,请使用
pgrep-- 不要自己通过 ps grep。 -
另外,避免使用全大写的变量名,除非引用环境变量或内置函数——遵循该规则可以避免命名空间冲突。
-
...更好的办法是启动您希望它以记录其 PID 或维护锁定文件的方式杀死的特定 sqlplus 命令——这样您就不会冒险杀死其他随机进程他们的名字中恰好有
sqlplus(比如vi my-sqlplus-script)。 -
+ echo set verify off set feedback off set heading off set pagesize 0 set numwidth 15 select case when max(LAST_MODIFIED_DATE) > to_date('2014-03-26 00:00:00', 'YYYY -MM-DD HH24:MI:SS') then 0 else 1 end from SHIPPING_TRANSACTION; + 1> /dw/etl/home/dev/tmp/extract/dw_shpmt/check_shplx_stby_sync.dw_shpmt.ssa_shpmt_trans_fact_shpmt_trans.tmpfile + pgrep sqlplus + PID=$ dw_adm_dev@zaisetldev01:/dw/etl/home/dev/bin >
标签: bash shell unix kill-process