1.4 打印进程的PID

本文展示了如何使用C语言获取并打印当前程序的进程ID(PID),通过调用`getpid()`函数实现。
#include <stdio.h>
#include <unistd.h>     //getpid()
int main()
{
        printf("这个程序的PID为: %d\n", getpid());
        return 0;
}

#!/bin/bash # ============================================================================= # 脚本名称: nginx_manage_menu.sh # 功能描述: 数字选择方式管理指定配置文件的 Nginx 服务 # 作者: Assistant # 版本: v1.4 (简化版) # 使用方法: # 1. chmod +x nginx_manage_menu.sh # 2. ./nginx_manage_menu.sh # ============================================================================= # --- 配置区域 --- NGINX_PATH="/u01/weblogic/openresty/nginx/sbin/nginx" CONFIG_FILE="/u01/weblogic/openresty/nginx/conf/nginx_8019.conf" PID_FILE="/u01/weblogic/nginx/logs/8019/nginx.pid" LOCK_FILE="/tmp/nginx_8019.lock" # --- 颜色定义 --- RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' PURPLE='\033[0;35m' CYAN='\033[0;36m' NC='\033[0m' # No Color # --- 函数定义 --- # 打印带颜色的信息 print_info() { echo -e "${BLUE}[INFO]${NC} $1" } print_success() { echo -e "${GREEN}[SUCCESS]${NC} $1" } print_warning() { echo -e "${YELLOW}[WARNING]${NC} $1" } print_error() { echo -e "${RED}[ERROR]${NC} $1" } print_title() { echo -e "${PURPLE}================================${NC}" echo -e "${PURPLE} Nginx 管理系统 (8019端口) ${NC}" echo -e "${PURPLE}================================${NC}" } print_menu() { echo -e "${CYAN}请选择操作:${NC}" echo " 1. 启动 Nginx" echo " 2. 停止 Nginx" echo " 3. 重启 Nginx" echo " 4. 重载配置" echo " 5. 检查状态" echo " 6. 配置文件语法检查" echo " 7. 查看配置信息" echo " 0. 退出" echo "" } # 检查 Nginx 可执行文件是否存在 check_nginx_binary() { if [ ! -x "$NGINX_PATH" ]; then print_error "Nginx 可执行文件不存在或不可执行: $NGINX_PATH" exit 1 fi } # 检查配置文件是否存在 check_config_file() { if [ ! -f "$CONFIG_FILE" ]; then print_error "配置文件不存在: $CONFIG_FILE" exit 1 fi } # 检查 PID 目录是否存在,不存在则创建 check_pid_dir() { PID_DIR=$(dirname "$PID_FILE") if [ ! -d "$PID_DIR" ]; then print_info "创建 PID 目录: $PID_DIR" mkdir -p "$PID_DIR" 2>/dev/null if [ $? -ne 0 ]; then print_error "无法创建 PID 目录: $PID_DIR" exit 1 fi fi } # 检查配置文件语法 check_config_syntax() { print_info "检查配置文件语法..." if $NGINX_PATH -t -c "$CONFIG_FILE" 2>&1; then print_success "配置文件语法正确" return 0 else print_error "配置文件语法错误" return 1 fi } # 检查 Nginx 进程是否正在运行 is_running() { if [ -f "$PID_FILE" ]; then PID=$(cat "$PID_FILE" 2>/dev/null) if [ -n "$PID" ] && kill -0 "$PID" 2>/dev/null; then return 0 fi fi return 1 } # 启动 Nginx start_nginx() { print_info "正在启动 Nginx..." # 检查是否已经在运行 if is_running; then print_warning "Nginx 已经在运行" return 0 fi # 检查配置文件语法 if ! check_config_syntax; then return 1 fi # 启动 Nginx $NGINX_PATH -c "$CONFIG_FILE" sleep 2 if is_running; then print_success "Nginx 启动成功" # 创建锁文件记录启动时间 echo "$(date '+%Y-%m-%d %H:%M:%S')" > "$LOCK_FILE" return 0 else print_error "Nginx 启动失败" return 1 fi } # 停止 Nginx stop_nginx() { print_info "正在停止 Nginx..." if ! is_running; then print_warning "Nginx 未运行" return 0 fi PID=$(cat "$PID_FILE") if kill -QUIT "$PID" 2>/dev/null; then # 等待进程结束 for i in $(seq 1 30); do if ! kill -0 "$PID" 2>/dev/null; then print_success "Nginx 停止成功" rm -f "$LOCK_FILE" 2>/dev/null return 0 fi sleep 1 done # 强制终止 print_warning "优雅停止超时,强制终止 Nginx..." if kill -9 "$PID" 2>/dev/null; then print_success "Nginx 强制停止成功" rm -f "$LOCK_FILE" 2>/dev/null return 0 else print_error "无法停止 Nginx" return 1 fi else print_error "无法停止 Nginx" return 1 fi } # 重启 Nginx restart_nginx() { print_info "正在重启 Nginx..." if is_running; then stop_nginx sleep 2 fi start_nginx } # 重载配置 reload_nginx() { print_info "正在重载 Nginx 配置..." if ! is_running; then print_error "Nginx 未运行,无法重载配置" return 1 fi # 检查配置文件语法 if ! check_config_syntax; then return 1 fi PID=$(cat "$PID_FILE") if kill -HUP "$PID" 2>/dev/null; then print_success "Nginx 配置重载成功" return 0 else print_error "Nginx 配置重载失败" return 1 fi } # 检查 Nginx 状态 status_nginx() { echo "" print_info "Nginx 状态检查:" if is_running; then PID=$(cat "$PID_FILE") print_success "Nginx 正在运行 (PID: $PID)" # 显示启动时间 if [ -f "$LOCK_FILE" ]; then START_TIME=$(cat "$LOCK_FILE") print_info "启动时间: $START_TIME" fi # 显示监听端口 if command -v ss &> /dev/null; then LISTEN_PORTS=$(ss -tlnp 2>/dev/null | grep nginx | awk '{for(i=1;i<=NF;i++) if($i ~ /:[0-9]+$/) {split($i, a, ":"); print a[length(a)]}}' | sort -u | tr '\n' ',' | sed 's/,$//') elif command -v netstat &> /dev/null; then LISTEN_PORTS=$(netstat -tlnp 2>/dev/null | grep nginx | awk '{print $4}' | awk -F':' '{print $NF}' | sort -u | tr '\n' ',' | sed 's/,$//') fi if [ -n "$LISTEN_PORTS" ]; then print_info "监听端口: $LISTEN_PORTS" fi else print_error "Nginx 未运行" fi echo "" } # 显示配置文件语法检查 syntax_check() { check_config_syntax } # 显示配置信息 show_config_info() { echo "" print_info "配置信息:" echo " Nginx 路径: $NGINX_PATH" echo " 配置文件: $CONFIG_FILE" echo " PID 文件: $PID_FILE" echo " PID 目录: $(dirname "$PID_FILE")" echo "" } # 主菜单函数 main_menu() { # 检查 PID 目录 check_pid_dir while true; do clear print_title show_config_info print_menu read -p "请输入选项 (0-7): " choice case $choice in 1) start_nginx echo "" read -p "按任意键继续..." ;; 2) stop_nginx echo "" read -p "按任意键继续..." ;; 3) restart_nginx echo "" read -p "按任意键继续..." ;; 4) reload_nginx echo "" read -p "按任意键继续..." ;; 5) status_nginx read -p "按任意键继续..." ;; 6) syntax_check echo "" read -p "按任意键继续..." ;; 7) show_config_info read -p "按任意键继续..." ;; 0) print_info "退出 Nginx 管理系统" exit 0 ;; *) print_error "无效选项,请输入 0-7 之间的数字" sleep 2 ;; esac done } # --- 主程序开始 --- # 检查 Nginx 可执行文件配置文件 check_nginx_binary check_config_file # 运行主菜单 main_menu exit 0 修复错误
最新发布
10-25
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值