Premièrement, le premier mot
Bonjour tout le monde, je suis il ya! Dans le développement Web, la "Gate Gate" souvent rencontrée et la solution générale est la suivante:
Utilisez la commande LSOF -I pour interroger le processus de PID Career Gateavec détruire -9 PID Kill
Seulement 2 étapes, je me sens aussi très encombrant, à savoir: je dois me souvenir de l'ordre, mais aussi pour entrer deux fois. Cet article écrira un script shell pour effectuer un tronc d'arborescence à un bouton.
Lundi, la sensibilisation
Par rapport à Python, des scripts sont souvent utilisés pour gérer le système d'exploitation ci-dessous, un développement élevé simple et efficace
. Mac OSX Par exemple, un fichier .sh créé localement, étapes pour effectuer les éléments suivants:
1, les paramètres de contenu de port et du filtre
seront des numéros de port traités et du contenu du filtre de commande. Paramètres, puis attribuez une valeur à deux variables dans le script shell
$ 1
Pour exécuter le premier paramètre du script, c'est spécifiquement: numéro de port$ 2
Effectuer le pardon.m le deuxième numéro du script, qui est: le contenu de la commande du filtre
# 要干掉的端口号port_be_kill=$1# 过滤内容filter_content=$2
2, la valeur renvoie le processus Gate d'acquisition formant des commandes LSOF - J'utilise le numéro de port , exécutez cette commande pour attribuer la valeur de retour Note: Le type de données IP_Status est une chaîne
3 et elle est convertie en une matrice
# 获取Shell返回值ip_cmd='lsof -i tcp:'$port_be_killecho "获取端口号对应的进程命令:"$ip_cmdecho "过滤命令字符串为:"$filter_content# 执行命令ip_status=`$ip_cmd`
car la chaîne n'est pas pratique pour le filtrage PID, nous devons diviser sur la variable IP_Status en une matrice
4, passez à travers une matrice, filtre PID
en premier, parcourez la matrice ci-dessus, extrayez chaque élément,alors tous les types de nombres filtrés et la dernière valeur contiennent des données
# 以空格来分隔,转为一个数组变量array=(${ip_status// / })
, utilisez la commande de la commande de tuerie -9 PID, le processus correspondant
# 判断数据的类型function check(){ local a="$1" printf "%d" "$a" &>/dev/null && echo "integer" && return printf "%d" "$(echo $a|sed 's/^[+-]\?0\+//')" &>/dev/null && echo "integer" && return printf "%f" "$a" &>/dev/null && echo "number" && return [ ${#a} -eq 1 ] && echo "char" && return echo "string"}
5, définir un alias
# 遍历数组for i in "${!array[@]}"; do # 注意:赋值等号=前后不能有空格 item="${array[i]}" # 注意:过滤十六进制字符串 # 先转为字符串,然后判断是否以0x开头 # echo $item if [ $item != 0x* ] then # 非十六进制数据,即:PID if [ $(check $item) = "integer" ] then # 判断上一个元素是否包含关键字 # 命令行是否包含关键字 item_pre="${array[i-1]}" # echo $item_pre # echo $filter_content if [ $item_pre =~ $filter_content ] then # echo $item # 调用kill-9 pid命令干掉进程 kill_cmd="kill -9 "$item echo $kill_cmd # 执行命令,干掉进程 $kill_cmd fi fi fi done
en un clic pour exécuter le script shell, nous utilisons alias pour définir un alias pour la commande, modifier le fichier "bash_profile ", écrivez le chemin complet du fichier de script shell dans une fonction personnalisable. 6,REAL COMBAT
Utilisez la commande .bash_profile pour actualiser le fichier de configuration, pour configurer l'alias à prendre effet
# vim .bash_profile# alias定义kill_port() { cd /Users/xingag/Desktop/work ./kill_port_with_args.sh $1 $2}alias kp=kill_port
Si maintenant 8000 est occupé, nous n'avons besoin que de vous allumer le terminal vers Entrez la commande "KP 8000 Python" pour détruire rapidement le processus cible Exécutez la capture d'écran comme suit:
doit indiquer que la commande LSOF est requise sous Linux, est-ce que CENTOS est un exemple . est Windows, port de manutention, les scripts shell sont occupés différemment;Il devrait être réécrit avec la commande netstat / TaskList / Taskkill De plus, le PC exécute le script shell pour utiliser Git Bash .